我的Spring Boot + Jersey REST服务无法正常工作。
EmailExistsException在UserController中引发,但我始终只收到错误500。而且我的异常未记录。
我怀疑异常处理存在一些配置问题,但不知道在哪里进行设置。有什么建议么?
@POST @Path("register") @Produces(MediaType.APPLICATION_JSON) public Response register(NewUserPayload newUserPayload) throws EmailExistsException, MessagingException
EmailExistsExceptionMapper
@Provider public class EmailExistsExceptionMapper extends AbstractExceptionMapper implements ExceptionMapper<EmailExistsException> { @Override public Response toResponse(EmailExistsException e) { ResponseEntity re = new ResponseEntity(org.springframework.http.HttpStatus.BAD_REQUEST); return this.errorResponse(HttpStatus.BAD_REQUEST_400, re, e); } }
AbstractExceptionMapper
@Slf4j public abstract class AbstractExceptionMapper { protected Response errorResponse(int status, ResponseEntity responseEntity, Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); log.error(sw.toString()); // logging stack trace. return customizeResponse(status, responseEntity); } private Response customizeResponse(int status, ResponseEntity responseEntity) { return Response.status(status).entity(responseEntity).build(); } }
build.gradle
compile("org.springframework.boot:spring-boot-starter-web") { exclude module: 'spring-boot-starter-tomcat' } compile "org.springframework.boot:spring-boot-starter-jetty" compile "org.springframework.boot:spring-boot-starter-security" compile "org.springframework.boot:spring-boot-starter-aop" compile "org.springframework.boot:spring-boot-starter-data-jpa" compile "org.springframework.boot:spring-boot-starter-thymeleaf" compile "org.springframework.boot:spring-boot-starter-jersey" compile 'org.springframework.boot:spring-boot-starter-mail'
解决了我的问题的答案:
我已经把packages(“ package.name”); 这是我的根程序包名称,异常映射器的工作原理很吸引人。
@Component @ApplicationPath("/api") public class JerseyConfig extends ResourceConfig { public JerseyConfig() { packages("package.name"); register(UserController.class); register(TimezoneController.class); } }