首页 > 解决方案 > 当我尝试在 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 块。

标签: jsonhibernatespring-boothttpresponse

解决方案


在这里,1)您需要为自定义异常添加错误处理程序 2)错误处理程序将抛出异​​常

一些有用的链接:处理spring hibernate SQL错误的推荐方法

Spring 是否有更简单的异常处理技术?

注意:这种方法已经过测试,我正在我的应用程序中使用它。

@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删除trycatch阻止。


推荐阅读