gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:01:10 25 4
gpt4 key购买 nike

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

JHipster 提供了一个ExceptionTranslator 类,用@ControllerAdvice 注释,它对 Controller 中客户端请求产生的错误进行异常处理。此类将异常类型映射到方法,每个方法构建并返回一个类型为 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
}

但是,当错误是在进入 Controller 之前由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 使用什么类(或其他机制)来表示错误?如果出现错误,我如何统一发送回客户端的数据类型,以便我可以为错误页面提供一个漂亮的唯一模板?

最佳答案

我在这篇博文中找到了解决方案:http://www.jayway.com/2014/10/19/spring-boot-error-responses/ :

@ExceptionHandler方法中,只需指定状态码,剩下的交给Spring处理。它将生成 JSON 响应,其字段与进入 Controller 之前发生错误时的字段相同:

@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"
}

关于java - 如何标准化 JHipster 应用程序中的 REST 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com