我在阅读一段线上代码的时候:
@RestController
@RequestMapping("")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private TokenManager tokenManager;
/**
* @api {PATCH} url 修改密码
* @apiGroup User
* @apiPermission logged user
* @apiVersion 2.1.0
* @apiDescription 修改密码
* @apiParam {String} targetUId PATH参数目标用户id
* @apiParam {String} userAccessToken QUERY参数,用户访问凭证
* @apiParam {String} uId QUERY参数,用户ID
* @apiParam {String} oldpwd QUERY参数用户旧密码
* @apiParam {String} password BODY参数用户新密码
* @apiParamExample {json} 请求BODY参数
* @apiSuccessExample {json} 返回样例:
* <p>
* {
* "meta": {
* "errCode": 0,
* "errMsg": "",
* "detail": "",
* "requestUrl": ""
* },
* "data": {}
* }
* </p>
*/
//1.修改密码模块
@RequestMapping(value = "/{targetuId}/password", method = RequestMethod.PATCH)
public ResponseEntity<ResponseContent> modifyPassword(@PathVariable String targetUId,
@RequestParam String userAccessToken, @RequestParam String uId, @RequestParam String oldpwd, @RequestBody String body) throws Exception {
//验证用户accessToken
//tokenManager.checkAccessToken(uId,userAccessToken);
String password = (String) JSON.parseObject(body).get("password");
//判断各@RequestParam里的参数值是否为空
if (!StringUtils.hasText(targetuId) || !StringUtils.hasText(userAccessToken) || !StringUtils.hasText(uId) || !StringUtils.hasText(oldpwd) || !StringUtils.hasText(password)) {
throw new ValidateFailureException("参数错误");
}
String errorMessage = userService.modifyPassword(oldpwd, password, targetuId);
if (errorMessage == null) {
ResponseContent content = ResponseUtil.okContent(null);
return ResponseEntity.ok(content);
} else {
throw new Exception(errorMessage);
}
}
}
发现如下问题:
首先,当参数不规范的时候,它抛出了ValidateFailureException();难道参数错误就直接抛出异常,让进程终止?还是spring底层会帮我们处理这些异常,让程序正常运行。
然后,参数错误我想的是创建一个DTO,给页面回显一些提示,可是为什么这里要抛异常呢?求解释啊大神。
最后,ResponseContent的代码如下:
package com.shaxun.api.response;
public class ResponseContent {
private Object data;
private Meta meta;
public void setMeta(Meta meta) {
this.meta = meta;
}
public Meta getMeta() {
return this.meta;
}
public void setData(Object data) {
this.data = data;
}
public Object getData() {
return this.data;
}
}
还有ResponseUtils的代码:
public class ResponseUtil {
public static ResponseContent okContent(Object data) {
Meta meta = new Meta();
meta.setErrcode(ErrorCode.OK.intValue());
meta.setDetail("OK");
ResponseContent rsp = new ResponseContent();
rsp.setMeta(meta);
rsp.setData(data);
return rsp;
}
}
8 个解决方案
#1
你也可以不抛出异常啊,把异常捕获,然后输出另外一个 ResponseContent Meta之类的,页面就可以处理了。
#2
@IUPRG
多谢二楼,已经明了
多谢二楼,已经明了
#3
你们是有封装catch异常的? 没有的话,可以直接返回一个 Response信息,提示前段什么异常或者错误就行了
#4
二楼不是你自己吗
#5
你是不会数数呀,哥们
#6
二楼不是你自己吗
@IUPRG
多谢二楼,已经明了
你是不会数数呀,哥们
小学没毕业。。请问您是几楼?
#7
二楼不是你自己吗
@IUPRG
多谢二楼,已经明了
你是不会数数呀,哥们
小学没毕业。。请问您是几楼?
哈哈哈哈,别欺负小白。
#8
异常时可以处理的 可以捕获也可以抛出
#1
你也可以不抛出异常啊,把异常捕获,然后输出另外一个 ResponseContent Meta之类的,页面就可以处理了。
#2
@IUPRG
多谢二楼,已经明了
多谢二楼,已经明了
#3
你们是有封装catch异常的? 没有的话,可以直接返回一个 Response信息,提示前段什么异常或者错误就行了
#4
@IUPRG
多谢二楼,已经明了
#5
二楼不是你自己吗
@IUPRG
多谢二楼,已经明了
你是不会数数呀,哥们
#6
二楼不是你自己吗
@IUPRG
多谢二楼,已经明了
你是不会数数呀,哥们
小学没毕业。。请问您是几楼?
#7
二楼不是你自己吗
@IUPRG
多谢二楼,已经明了
你是不会数数呀,哥们
小学没毕业。。请问您是几楼?
哈哈哈哈,别欺负小白。
#8
异常时可以处理的 可以捕获也可以抛出