小小的建议:
Controller层接受前端的参数的时候不要使用Map类型去接收(前端传参时谁知道要传什么东西。。。。),如果参数多的话最好封装成一个实体类进行接收。
实体类不要直接使用数据库对应的实体类,有些参数不一定是需要进行传递的(虽然可以标识为不必须的)
接收Map
进入正题
响应的枚举
可以固定一些常用的响应码等信息。
import lombok.Getter;
/**
* <p>
* 响应结果枚举
* </p>
*
* @author D
* @version 1.0
* @date 2020/6/5 8:12
*/
@Getter
public enum ResultCode {
/**
* 响应成功
*/
SUCCESS(true,2000,"成功"),
/**
* 响应失败
*/
FAILED(false,4000,"错误"),
/**
* 响应失败,未知错误
*/
ERROR(false,5000,"未知错误");
/**
* 响应是否成功
*/
private final Boolean success;
/**
* 响应状态码
*/
private final Integer code;
/**
* 响应信息
*/
private final String message;
ResultCode(Boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
}
统一响应类
这里使用了swagger的一些注解,如不需要可以自行去除。
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import top.ddandang.swagger.enums.ResultCode;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 封装向客户端发回的响应数据
* </p>
*
* @author D
* @version 2.0
* @date 2020/6/5 8:26
*/
@Data
@NoArgsConstructor
@ApiModel(description = "返回响应数据")
public class R {
/**
* 响应是否成功
*/
@ApiModelProperty(value = "是否成功")
private Boolean success;
/**
* 响应码
*/
@ApiModelProperty(value = "响应状态码")
private Integer code;
/**
* 响应信息
*/
@ApiModelProperty(value = "响应信息")
private String message;
/**
* 成功返回的数据
*/
@ApiModelProperty(value = "成功返回的数据")
private Map<String, Object> data = new HashMap<>();
public R(Boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
public static R success() {
return new R(ResultCode.SUCCESS.getSuccess()
, ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
}
public static R failed() {
return new R(ResultCode.FAILED.getSuccess()
, ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage());
}
public static R error() {
return new R(ResultCode.ERROR.getSuccess()
, ResultCode.ERROR.getCode(), ResultCode.ERROR.getMessage());
}
/**
* @param map 存放数据的map
* @return 响应的数据
*/
public R data(Map<String, Object> map) {
this.setData(map);
return this;
}
/**
* @param key 参数名
* @param value 数据
* @return 返回的数据 key-value
*/
public R data(String key, Object value) {
this.data.put(key, value);
return this;
}
/**
* 自定义返回信息
*
* @param message 返回信息
* @return 返回this
*/
public R message(String message) {
this.setMessage(message);
return this;
}
/**
* 自定义返回状态码
*
* @param code 状态码
* @return 返回this
*/
public R code(Integer code) {
this.setCode(code);
return this;
}
/**
* 自定义响应状态
*
* @param success 成功状态
* @return 返回this
*/
public R success(Boolean success) {
this.setSuccess(success);
return this;
}
}
使用方法(controller需要加@RestController注解)
返回的数据可以直接以Key----Value(String, Object)的形式,或者直接传递Map<String, Object>
@GetMapping("/test")
public R test() {
User user = new User("D", "ddandang", "123456");
return R.success().data("user", user);
}
响应结果
@GetMapping("/test")
public R test() {
User user = new User("D", "ddandang", "123456");
Map<String, Object> map = new HashMap<>();
List<User> users = new ArrayList<>();
users.add(user);
int total = 10;
map.put("total", total);
map.put("userList", users);
return R.success().data(map);
}
修改状态码,返回信息,成功状态
return R.success().data(map).code(404).message("分页查询用户的数据").success(true);