Skip to content

Commit 0d26db1

Browse files
committed
[add] 加入统一响应类ResponseData
1 parent 8db6225 commit 0d26db1

File tree

4 files changed

+131
-10
lines changed

4 files changed

+131
-10
lines changed

web/src/main/java/demo/web/controller/RestfulController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package demo.web.controller;
22

3+
import demo.web.controller.base.ResponseData;
34
import demo.web.controller.req.User;
45
import demo.web.handler.GlobalExceptionHandler;
56
import demo.web.service.AsyncTaskService;
@@ -110,8 +111,8 @@ public User param(@Valid User user) {
110111
* 异常类型:{@link org.springframework.web.bind.MethodArgumentNotValidException}
111112
*/
112113
@PostMapping("/param1")
113-
public User param1(@Valid @RequestBody User user) {
114-
return user;
114+
public ResponseData param1(@Valid @RequestBody User user) {
115+
return ResponseData.successObj().putData("user", user);
115116
}
116117

117118
/**
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package demo.web.controller.base;
2+
3+
/**
4+
* parent
5+
* demo.web.controller.base
6+
* 返回状态码
7+
*
8+
* @author BlueDriver
9+
* @email cpwu@foxmail.com
10+
* @date 2019/04/01 10:16 Monday
11+
*/
12+
public interface ResponseCode {
13+
/**
14+
* 成功success
15+
*/
16+
int SUCCESS = 0;
17+
/**
18+
* 异常Exception
19+
*/
20+
int EXCEPTION = 1;
21+
/**
22+
* 参数错误Parameter error
23+
*/
24+
int PARAM_INVALID = 2;
25+
/**
26+
* 无权限NO permission
27+
*/
28+
int NO_PERMISSION = 3;
29+
/**
30+
* 状态异常
31+
*/
32+
int STATUS_ERROR = 4;
33+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package demo.web.controller.base;
2+
3+
import lombok.Data;
4+
import lombok.experimental.Accessors;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
/**
10+
* parent
11+
* demo.web.controller.base
12+
* 统一响应数据
13+
*
14+
* @author BlueDriver
15+
* @email cpwu@foxmail.com
16+
* @date 2019/04/01 10:03 Monday
17+
*/
18+
@Data
19+
@Accessors(chain = true)
20+
public class ResponseData {
21+
/**
22+
* 返回码
23+
*
24+
* @see ResponseCode
25+
*/
26+
private Integer code;
27+
/**
28+
* 说明
29+
*/
30+
private String msg;
31+
/**
32+
* 数据
33+
*/
34+
private Map<String, Object> data = new HashMap<>();
35+
/**
36+
* 扩展数据(根据实际需要赋值)
37+
*/
38+
private Object ext;
39+
40+
/**
41+
* 辅助构造方法
42+
* 成功返回,剩下的只需要赋值data即可
43+
*/
44+
public static ResponseData successObj() {
45+
return successObj(null);
46+
}
47+
48+
/**
49+
* 辅助构造方法,带data设置
50+
* 成功返回
51+
*/
52+
public static ResponseData successObj(Map<String, Object> data) {
53+
ResponseData responseData = new ResponseData();
54+
responseData.setCode(ResponseCode.SUCCESS);
55+
responseData.setMsg("处理成功");
56+
responseData.setData(data == null ? new HashMap<>() : data);
57+
return responseData;
58+
}
59+
60+
/**
61+
* 设置data
62+
*/
63+
public ResponseData putData(String key, Object value) {
64+
this.getData().put(key, value);
65+
return this;
66+
}
67+
68+
/**
69+
* 辅助构造方法
70+
* 异常返回,使用默认异常消息
71+
*/
72+
public static ResponseData exceptionObj(Exception e) {
73+
return exceptionObj(e, "发生异常:" + e.getMessage());
74+
}
75+
76+
/**
77+
* 辅助构造方法
78+
* 异常返回,带异常消息
79+
*/
80+
public static ResponseData exceptionObj(Exception e, String msg) {
81+
ResponseData responseData = new ResponseData();
82+
responseData.setCode(ResponseCode.EXCEPTION);
83+
responseData.setMsg(msg);
84+
//为便于排查异常,将异常类名赋值为ext
85+
responseData.setExt(e.getClass().getName());
86+
return responseData;
87+
}
88+
}

web/src/main/java/demo/web/handler/GlobalExceptionHandler.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@
3333
@ResponseBody
3434
public class GlobalExceptionHandler {
3535
/**
36-
* 处理参数校验异常
36+
* 处理多参校验异常
3737
*/
3838
@ExceptionHandler(value = {MethodArgumentNotValidException.class, BindException.class})
3939
private ResponseData paramHandler(Exception e) {
4040
ResponseData responseData = new ResponseData();
4141
responseData.setCode(ResponseCode.PARAM_INVALID);
4242
FieldError error;// = new FieldError("obj", "field", "default msg");
43-
//入参为对象
43+
//入参为对象(json)
4444
if (e instanceof MethodArgumentNotValidException) {
4545
MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e;
4646
error = ex.getBindingResult().getFieldError();//如果错误不止一个,亲测好象是随机获取一个错误
@@ -49,21 +49,22 @@ private ResponseData paramHandler(Exception e) {
4949
BindException ex = (BindException) e;
5050
error = ex.getBindingResult().getFieldError();
5151
}
52-
responseData.setMsg(error.getField() + error.getDefaultMessage() + ":" + error.getRejectedValue());
52+
responseData.setMsg("参数非法:" + error.getDefaultMessage() + ": " +
53+
"[" + error.getField() + "=" + error.getRejectedValue() + "]");
5354
responseData.setExt(e.getClass().getName());
5455
return responseData;
5556
}
5657

5758
/**
58-
* 单个参数校验
59+
* 单个参数校验(键值对)
5960
*/
6061
@ExceptionHandler(value = ConstraintViolationException.class)
6162
@ResponseBody
6263
public ResponseData handleBindGetException(ConstraintViolationException e) {
6364
log.error("单个参数校验异常", e);
6465
ResponseData responseData = new ResponseData();
6566
responseData.setCode(ResponseCode.PARAM_INVALID)
66-
.setMsg(e.getMessage())
67+
.setMsg("参数非法:" + e.getMessage())
6768
.setExt(e.getClass().getName());
6869
return responseData;
6970
}
@@ -90,9 +91,7 @@ public ResponseData handleMax(MaxUploadSizeExceededException e) {
9091
private ResponseData defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp,
9192
HttpSession session, Exception e) {
9293
log.error("exception handler: ", e);
93-
ResponseData responseData = ResponseData.exceptionObj(e);
94-
responseData.setExt(e.getClass().getName());
95-
return responseData;
94+
return ResponseData.exceptionObj(e);
9695
}
9796

9897

0 commit comments

Comments
 (0)