json - 当我尝试在 Spring Boot 应用程序中将自定义错误传递给客户端时发生异常
问题描述
java.lang.IllegalStateException:提交响应后无法调用 sendError()
如上所述,我在线路响应 .sendError() 方法中遇到错误。我已经在互联网上搜索了 4 天。但我无法弄清楚问题所在。这个问题的原因是什么?
我有一个自定义异常类。在以下代码中,catch 块成功捕获了我的自定义异常。但是当我尝试将它发送到客户端时,它会返回上面提到的异常。
我已经尝试过 解决方案 1 – Controller 级别 @ExceptionHandler 解决方案 2 – HandlerExceptionResolver 解决方案 3 – @ControllerAdvice 解决方案 4 – ResponseStatusException
解决上述问题的方法。但不适合我:(
我已将错误代码和错误消息添加到响应正文中。然后我可以成功得到错误。但这不是我想要的方式。
@RequestMapping(value="/getMemberID/", method=RequestMethod.POST ,headers ="Accept=application/json")
public ResponseMemberID getMemberID(@RequestBody RequestMemberID request,HttpServletResponse response, @Context HttpServletRequest _request ) throws Exception {
Member_info memberinfo = new Member_info();
ResponseMemberID _response =new ResponseMemberID();
try {
memberinfo = memberinfoservice.getMemberID(request.getPin(),request.getMsisdn());
_response.setMember_id(memberinfo.getMember_id());
}catch(MemberNotFoundException exp) {
response.sendError(exp.getErrorCode(), exp.getErrorMessage());
}
return _response;
}
我需要使用上面的 sendError() 方法获取错误代码和错误消息作为 JSON 响应。异常成功进入 catch 块。
解决方案
在这里,1)您需要为自定义异常添加错误处理程序 2)错误处理程序将抛出异常
一些有用的链接:处理spring hibernate SQL错误的推荐方法
注意:这种方法已经过测试,我正在我的应用程序中使用它。
@RestControllerAdvice
@RequestMapping(produces = "application/json")
public class DefaultExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(MemberNotFoundException .class)
@ResponseStatus(value = HttpStatus.CONFLICT)
public Map<String, String> handleConstraintViolationException(ConstraintViolationException ex) {
Map<String, String> response = new HashMap);
// set your response
return new ResponseEntity<>(response, ex.getStatus());
}
}
从,,getMemberID
删除try
和catch
阻止。
推荐阅读
- c - 即使在使用 free() 之后 Valgrind 也会报告丢失的字节
- firebase - 交易可以在收款时使用吗?
- python - 具有所有可能移位的滚动矩阵
- ios - 在 iOS 中切换 RTL 时,UIAlertController 未在中心显示文本
- javascript - 如何创建切换导航栏以与 redux thunk 做出反应
- haskell - 尝试在 Nixos 上使用堆栈编译静态可执行文件时出现链接器错误
- android - Viewpager 在 OnePlus 5T 设备中无法正常滑动
- r - 运行 qhpvt 的时间范围
- c - While循环的参数内的逗号
- gremlin - Gremlin 遍历膨胀 (OLTP)