一、基本目录结构
基本目录
二、SpringBoot响应客户端
1、controller
在controller目录下创建一个controller:
单机new ->java class,命名为XxxController,例如:
controller
编写内容:
运行结果:
三、SpringBoot响应客户端数据渲染json
在pojo里创建一个user类,在此之前我先引入一个简化实体类的maven依赖Lombok,在pom文件添加如下依赖即可:
org.projectlombok
lombok
1.18.6
provided
学习更多关于Lombok访问GitHub官方:https://github.com/mplushnikov/lombok-intellij-plugin
user类:
package com.example.pojo;
import lombok.*;
@Data //创建所有get set 等别的方法
@AllArgsConstructor //创建所有有参构造方法
@NoArgsConstructor //创建无参构造方法
@Builder //创建对象,类似于new
public class User {
private Integer age;
private String name;
private String sex;
private Date birthday;
}
测试controller:
package com.example.controller;
import com.example.pojo.User;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @description: 测试控制器
* @author: LiChen
* @create: 2019-04-19 16:25
*/
@RestController //spring boot注解 @RestController = @Controller + @ResponseBody
@RequestMapping("/test") //controller请求路径
public class TestController {
@RequestMapping(value = "/test",method = RequestMethod.GET) //test方法请求路径和请求方式
public Integer test(){
Integer str = 3;
return str;
}
@RequestMapping(value = "get_user",method = RequestMethod.GET)
public User getUser(){
User user = User.builder()
.age(16)
.name("张三")
.sex("男")
.birthday(new Date())
.build();
return user;
}
}
启动服务访问你的地址,运行结果:
image.png
光是这样返回肯定是不行的,所以要对返回结果进行封装,以下是我封装的两个类:SR.java和SRCode.java
package com.example.common;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
/**
* @Title: RS.java
* @Package: com.xxx.common
* @author: LiChen
* @create: 2019-04-19 13:27
*/
//保证序列化json的时候,如果是null的对象,key也会消失
//@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) 过期不推荐使用
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SR implements Serializable {
//响应状态码
private Integer status;
//响应消息
private String msg;
//响应数据
private T data;
private SR(Integer status){
this.status = status;
}
private SR(Integer status,String msg){
this.status = status;
this.msg = msg;
}
private SR(Integer status,T data){
this.data = data;
this.status = status;
}
private SR(Integer status,String msg,T data){
this.status = status;
this.data = data;
this.msg = msg;
}
//使之不再json序列化中
@JsonIgnore
private boolean success(){
return this.status == SRCode.SUCCESS.getCode();
}
public Integer getStatus(){
return status;
}
public T getData(){
return data;
}
public String getMsg(){
return msg;
}
public static SR ok(){
return new SR(SRCode.SUCCESS.getCode());
}
public static SR ok(T data){
return new SR(SRCode.SUCCESS.getCode(),SRCode.SUCCESS.getDesc(),data);
}
public static SR ok(String msg){
return new SR(SRCode.SUCCESS.getCode(),msg);
}
public static SR ok(String msg ,T data){
return new SR(SRCode.SUCCESS.getCode(),msg,data);
}
public static SR error(){
return new SR(SRCode.ERROR.getCode(),SRCode.ERROR.getDesc());
}
public static SR error(String msg){
return new SR(SRCode.ERROR.getCode(),msg);
}
public static SR error(Integer code,String msg){
return new SR(code,msg);
}
}
上述用了json序列化工具:pom依赖
com.fasterxml.jackson.core
jackson-databind
2.6.2
package com.example.common;
/**
* @Tile: SRCode
* @author: LiChen
* @create: 2019-04-19 13:44
* @description: 自定义响应数据结构:
* 200:表示成功
* 500:表示错误,错误信息存在msg字段中
* 501:bean验证错误,不管有多少个错误都已map形式返回
* 502:拦截器拦截到用户token错误
* 555:异常抛出信息
* 10:用户未登陆
* 2:不是管理员权限
*/
public enum SRCode {
SUCCESS(200,"SUCCESS"),
ERROR(500,"ERROR"),
BEAN_ERROR(501,"BEAN_ERROR"),
TOKEN_ERROR(502,"TOKEN_ERROR"),
EXCEPTION_INFO(555,"EXCEPTION_INFO"),
NEED_LOGIN(10, "NEED_LOGIN"),
ILLEGAL_ARGUMENT(2, "ILLEGAL_ARGUMENT");
private final Integer code;
private final String desc;
SRCode(Integer code,String desc){
this.code = code;
this.desc = desc;
}
public int getCode(){
return code;
}
public String getDesc(){
return desc;
}
}
修改controller:
@RequestMapping(value = "get_user",method = RequestMethod.GET)
public SR getUser(){
User user = User.builder()
.age(16)
.name("张三")
.sex("男")
.birthday(new Date())
.build();
return SR.ok(user);
}
运行结果:
image.png