json - 当我尝试在 Spring Boot 应用程序中将自定义错误传递给客户端时发生异常

标签 json hibernate spring-boot httpresponse

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed



如上所述,我在行响应 .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) 并且错误处理程序会抛出异常

一些有用的链接:Recommended way of dealing with spring hibernate SQL errors

Is there a simpler exception handling technique for 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堵塞。

关于json - 当我尝试在 Spring Boot 应用程序中将自定义错误传递给客户端时发生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954374/

相关文章:

java - Spring Boot 测试 - 没有 'com.example.MyService' 类型的合格 bean 可用

javascript - 客户端接收json对象到javascript

尝试将 Json 响应转换为日期时出现 Java ParseException

android - 如何在 android 中创建嵌套的动态 Json 对象 pojo 类

具有多个命名参数和结果集的 Hibernate 存储过程调用不起作用

hibernate - 自定义类似谓词来处理自定义用户定义类型(Hibernate UserType)

mysql - 如何在hibernate和SQL中的字符串查询中转义下划线?

java - 用于 Spring Boot 应用程序中集成测试的内存数据库配置(HSQLDB)

jquery - : jQuery 1. 4、ajax/json、Firebug Lite 和 IE 8 组合的错误

java - 在 Spring 应用程序中使用或测试时如何将参数传递给 Spring 存储库