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

mr_m1m3

长话短说:我正在创建应该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异常添加异常处理程序,但是它也不起作用。

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

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

mr_m1m3

解决方案是RequestBody批注中简单地将required = false放入之后,我可以轻松添加一些逻辑以引发自定义异常并在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");
    } (...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring控制器获取请求/响应

无法在Spring MVC控制器中对POST请求发送json响应

java Spring boot在通过curl发送post请求时获取控制器中的文件名

从 Spring 控制器方法发送 Json 响应的最佳实践

控制器中的Spring异步请求处理出现问题-获取java.lang.IllegalStateException:提交响应后无法转发

Spring REST控制器发布请求

Spring Integration +过滤器+向REST控制器发送400错误请求

Spring MVC控制器处理所有请求,不应这样做

如何在Spring REST控制器方法中从RequestBody获取参数

控制器方法中requestBody上的Spring Boot @Valid无法正常工作

通过LocalDateFilter Spring Rest控制器时收到错误的请求

将JSON传递给Spring控制器时出现400(错误请求)

使用Ajax将@RequestBody中的多个变量传递给Spring MVC控制器

无法加载资源:服务器对控制器的状态为400(错误请求)的Spring JS调用响应不起作用

如何使用ajax将发布请求发送到Spring控制器

从 Spring boot 控制器发送响应 200 以进行异步处理

如何正确处理将数组发送到Spring MVC控制器方法的AJAX请求?为什么它不起作用?

问题与Spring Webflux WebClient的,没有试图发送POST请求时发生

Spring MVC控制器如何处理多个长HTTP请求?

在对Spring控制器的Ajax调用中出现400错误的请求错误

是否可以在Spring控制器中拆分请求参数?

Spring MVC如何在我的控制器方法中获取GET HTTP请求的参数值?

Spring Boot项目中如何在控制器中编写请求方法类型

根请求的自定义响应通过RepositoryRestResource-s和常规控制器在Spring REST HATEOAS中

Laravel 5:首先发送响应,然后在控制器中处理请求

Spring MVC:如何修改从控制器发送的json响应

从Spring控制器发送响应作为键值对吗?

如何在请求正文 spring mvc 中发送带有实体对象的额外字段?

使用Spring控制器处理错误404