springboot的restful接口成功失败返回值设计
springboot的restful接口最终返回值ResponseEntity
springboot的restful接口最终的返回值都是ResponseEntity,调用者关心的是状态码和结果.ResponseEntity继承自HttpEntity,继承了body也就是结果,新加属性status也就是状态码.
ResponseEntity赋值
- status默认200.
- 接口返回值会被封装到body中
接口返回值设计
所有返回状态码都是200,接口返回值定义成一个统一的对象三个属性code,message,data。接口调用成功有用信息code和data(如果需要返回值);接口调用失败有用信息code和message.
- code:业务码定义业务操作的结果
- message:错误信息
- data:成功的返回值
/**
* 返回值对象
*/
public class Result {
/**
* 响应码
*/
private String code;
/**
* 错误消息
*/
private String message;
/**
* 数据
*/
private Object data;
public Result setCode(String code) {
this.code = code;
return this;
}
public Result setMessage(String message) {
this.message = message;
return this;
}
public Result setData(Object data) {
this.data = data;
return this;
}
private static final String UNKNOWN_ERROR_MESSAGE = "unknown error";
/**
* 成功无返回值
* @return Result
*/
public static Result ok() {
return new Result().setCode(ResultCodeConstant.SUCCESS);
}
/**
* 成功有返回值
* @return Result
*/
public static Result ok(Object data) {
return new Result().setCode(ResultCodeConstant.SUCCESS).setData(data);
}
/**
* 属性校验失败,错误信息message
* @return Result
*/
public static Result bad(String message) {
return new Result().setCode(ResultCodeConstant.FIELD_ILLEGAL).setMessage(message);
}
/**
* SQL异常,异常信息message
* @return Result
*/
public static Result error(String message) {
return new Result().setCode(ResultCodeConstant.SQL_FAILURE).setMessage(message);
}
/**
* 通用:自定义状态码,说明,返回值
* @return Result
*/
public static Result build(String code, String message, Object data) {
return new Result().setCode(code).setMessage(message).setData(data);
}
}
/**
* 业务响应码
*/
public class ResultCodeConstant {
/** 成功 */
public static final String SUCCESS = "0000";
/** 参数不合法 */
public static final String FIELD_ILLEGAL = "1000";
/** sql执行失败 */
public static final String SQL_FAILURE = "2000";
}
import org.springframework.web.bind.annotation.*;
/**
* 接口
*/
@RestController
@RequestMapping("/demo")
public class DemoController{
@DeleteMapping
@Override
public Result deleteBatchIds(@RequestParam List<Long> ids) {
if (ids == null && ids.size == 0) {
logger.error("ids is required.");
return Result.bad("ids is required.");
}
//TODO 处理ids
return Result.ok();//return Result.error("message");
}
}