gpt4 book ai didi

Java/Spring > 当请求中没有发送正文时,使用@RequestBody 处理 Controller 方法的错误请求响应

转载 作者:行者123 更新时间:2023-11-29 10:09:42 27 4
gpt4 key购买 nike

长话短说:我正在创建应该是 100% REST 的 API。我正在尝试覆盖以下情况的默认响应:我的@RestController 中有一个方法,它以@RequestBody 作为属性

@RequestMapping(value = {"register"}, method = RequestMethod.POST, produces = "application/hal+json")
public Resource<User> registerClient(@RequestBody User user, HttpServletRequest request)

如果我发送正确的请求,该方法工作正常。但是当我不这样做时就会出现问题。当请求的正文为空时,我会收到一个状态为 400 的通用 Tomcat 错误页面,我需要它只发送一个字符串或一个 JSON 对象。

到目前为止,我尝试在我的 RestControllerAdvice 中为来自包 org.springframework.web.binding 的所有 Spring 异常添加异常处理程序,但它也不起作用。

我已经知道对于某些与安全相关的错误,必须在配置中创建处理程序,但我不知道是否属于这种情况。

有人遇到过类似的问题吗?有什么我想念的吗?

最佳答案

解决方案是简单地将 required = false 放在 RequestBody 注释中。之后,我可以轻松地添加一些逻辑来抛出自定义异常并在 ControllerAdvice 中处理它。

@RequestMapping(value = {"register"}, method = RequestMethod.POST, produces = "application/hal+json")
public Resource<User> registerClient(@RequestBody(required = false) User user, HttpServletRequest request){
logger.debug("addClient() requested from {}; registration of user ({})", getClientIp(request), user);
if(user == null){
throw new BadRequestException()
.setErrorCode(ErrorCode.USER_IS_NULL.toString())
.setErrorMessage("Wrong body or no body in reqest");
} (...)

关于Java/Spring > 当请求中没有发送正文时,使用@RequestBody 处理 Controller 方法的错误请求响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45997775/

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