Java Restful Spring引导应用程序中的异常映射

Java Restful Spring引导应用程序中的异常映射,java,spring-boot,exception-handling,exceptionmapper,Java,Spring Boot,Exception Handling,Exceptionmapper,我有一个自定义的异常类,当异常发生时,我希望将其作为json返回 SpringCacheException.java RestExceptionHandler.java 在这里,我从数据库中删除联系人表,抛出异常,得到下面的长响应 Position: 111 2017-10-22 00:37:08.577 WARN 10336 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Failed to invo

我有一个自定义的异常类,当异常发生时,我希望将其作为json返回

SpringCacheException.java

RestExceptionHandler.java

在这里,我从数据库中删除联系人表,抛出异常,得到下面的长响应

     Position: 111
2017-10-22 00:37:08.577  WARN 10336 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Failed to invoke @ExceptionHandler method: org.springframework.http.ResponseEntity<java.lang.Object> com.myapp.exception.RestExceptionHandler.handleBadRequests(org.springframework.http.HttpStatus,java.lang.String,com.myapp.exception.SpringCacheException) throws java.io.IOException
我只想要一个SpringCacheException类型的json,但我得到的是一个包含错误数据的长json。谁能告诉我哪里做错了。谢谢


整个代码可以在-

中找到,您的异常处理程序方法在其注释中需要SpringCacheException对象的单个参数

@ExceptionHandler(SpringCacheException.class)
        ResponseEntity<Object> handleBadRequests(SpringCacheException ex) throws IOException  {
            //SpringCacheException errorMessage = new SpringCacheException(HttpStatus.BAD_REQUEST,"My Error",ex);
            return new ResponseEntity<Object>(ex, HttpStatus.BAD_REQUEST);
        }
    }
顺便说一下,创建一个新的SpringCacheException违背了该处理程序的目的。您应该返回传入方法的异常


我将您的项目分叉并在此处修复:

我认为您可能必须将异常转换为其他内容才能传递到ResponseEntityconstructor@Jeff你能告诉我我需要做什么改变吗??
@Override
    public Contact show(int id) throws SpringCacheException  {
        try {
            Contact contact = contactRepository.findOneById(id);
            return contact;
        }
        catch (Exception e) {
            throw new SpringCacheException();
        }
    }
     Position: 111
2017-10-22 00:37:08.577  WARN 10336 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Failed to invoke @ExceptionHandler method: org.springframework.http.ResponseEntity<java.lang.Object> com.myapp.exception.RestExceptionHandler.handleBadRequests(org.springframework.http.HttpStatus,java.lang.String,com.myapp.exception.SpringCacheException) throws java.io.IOException
@ExceptionHandler(SpringCacheException.class)
        ResponseEntity<Object> handleBadRequests(SpringCacheException ex) throws IOException  {
            //SpringCacheException errorMessage = new SpringCacheException(HttpStatus.BAD_REQUEST,"My Error",ex);
            return new ResponseEntity<Object>(ex, HttpStatus.BAD_REQUEST);
        }
    }