Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何标准化JHipster应用程序中的REST错误?_Java_Spring_Spring Mvc_Spring Boot_Jhipster - Fatal编程技术网

Java 如何标准化JHipster应用程序中的REST错误?

Java 如何标准化JHipster应用程序中的REST错误?,java,spring,spring-mvc,spring-boot,jhipster,Java,Spring,Spring Mvc,Spring Boot,Jhipster,我已经使用JHipster作为起始模板构建了一个应用程序 JHipster提供了一个用@ControllerAdvice注释的异常Translator类,该类对控制器中客户端请求生成的错误执行异常处理。这个类将异常类型映射到方法,每个方法构建并返回一个类型为ErrorDTO的对象,然后用JSON序列化并发送到客户端。我为一个简单的用例添加了自己的方法: @ExceptionHandler(IllegalArgumentException.class) @ResponseBody @Respons

我已经使用JHipster作为起始模板构建了一个应用程序

JHipster提供了一个用
@ControllerAdvice
注释的
异常Translator
类,该类对控制器中客户端请求生成的错误执行异常处理。这个类将异常类型映射到方法,每个方法构建并返回一个类型为
ErrorDTO
的对象,然后用JSON序列化并发送到客户端。我为一个简单的用例添加了自己的方法:

@ExceptionHandler(IllegalArgumentException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorDTO processIllegalArgumentException(IllegalArgumentException exception) {
    return new ErrorDTO(ErrorConstants.ERR_VALIDATION, exception.getMessage());
}
它工作得很好,如果发生错误(在本例中是一个太短的值),我会在客户端上收到这个JSON:

{
    "message":"error.validation",
    "description":"The request payload that defines the search terms should be at least 3 characters long.",
    "fieldErrors":null
}
但是,当错误在进入控制器之前由Spring MVC本身生成时(例如缺少必需的参数),客户端接收的json的结构是不同的,例如:

{
    "timestamp":"2015-11-27T15:08:32.897+0000",
    "status":400,
    "error":"Bad Request",
    "exception": "org.springframework.http.converter.HttpMessageNotReadableException",
    "message":"Required request body is missing: public java.lang.String ch.unine.directory.web.rest.SearchResource.search(java.lang.String)",
    "path":"/api/search"
}

Spring Boot/Spring MVC使用什么类(或其他机制)来表示错误?如何在出现错误时统一发送回客户端的数据类型,以便为错误页面提供一个独特的模板?

我在这篇博文中找到了解决方案:

@ExceptionHandler
方法中,只需指定状态代码并让Spring处理其余的代码。它将生成JSON响应,其字段与进入控制器之前发生错误时的字段相同:

@ExceptionHandler
void handleIllegalArgumentException(IllegalArgumentException e, HttpServletResponse response) throws IOException {
    response.sendError(HttpStatus.BAD_REQUEST.value());
}
样本响应主体:

{
    "timestamp": "2015-11-27T16:08:46.148+0000",
    "status": 400,
    "error": "Bad Request",
    "exception": "java.lang.IllegalArgumentException",
    "message": "The request payload that defines the search terms should be at least 3 characters long.",
    "path": "/api/search"
}