spring boot中的BindingResult参数不起作用

肯尼斯

我正在尝试捕获@RestController 中的错误。

我展示了我正在玩的模型:

    public class CreateUpdateTodoDto {
         private Long userId;

         @NotNull(message = "The TODO title must not be null")
         @Size(min=1, max=3, message = "Title size too large, maximum < 4")
         private String title;

         @NotNull
         private boolean completed;

    }

我展示了 RestController

@PostMapping("/")
    public ResponseEntity<?> insert(@RequestBody @Valid CreateUpdateTodoDto dto, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            throw new TodoConstrainValidationException(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }

        return ResponseEntity.status(HttpStatus.CREATED).body(todoService.insert(dto));

    }


    @PutMapping("/{id}")
    public ResponseEntity<?> update(@RequestBody @Valid CreateUpdateTodoDto dto,
                                    @PathVariable("id") int id,
                                    HttpServletRequest request,
                                    BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            throw new TodoConstrainValidationException(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }

        return ResponseEntity.ok().body(todoService.update(dto, id, request));

    }

在插入方法中,如果我发送一个无效对象,它会正确检测它并按我的预期抛出异常,这对我来说都是正确的。问题来自于 put 方法,如果我发送一个无效的对象,我只会收到一个空体和状态 400 的响应,现在如果我删除参数@PathVariable ("id") int idHttpServletRequest request,它正常工作。因为如果你有这两个参数(int id 和 HttpServletRequest 请求),它的工作方式就不一样了?我给你留下了我从邮递员那里得到的回复的照片。

对我来说这是正确的,这是预期的(在我的无知范围内) 在此处输入图片说明

在这里我已经迷路了,我可以消除我之前评论过的 2 个参数,它会起作用,但我不知道为什么会这样。

在此处输入图片说明

谢谢!

S.阿努山

参数顺序很重要,BindingResult需要在您进行验证的请求正文之后。修改PuttMapping如下。

@PutMapping("/{id}")
public ResponseEntity<?> update(@RequestBody @Valid 
CreateUpdateTodoDto dto, BindingResult bindingResult,
                                @PathVariable("id") int id,
                                HttpServletRequest request ) 

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WebMvcConfigurer 在 Spring Boot 中不起作用?

使用命令行参数覆盖spring-boot中的yml配置不起作用

必需的参数异常在Spring Boot 2.x中不起作用

json中的Json在Spring Boot中不起作用

Spring的值注释在构造函数参数中不起作用

@Transactional在带有CrudRepository的Spring Boot中不起作用

Spring Boot-@PreAuthorize在测试中不起作用

RestController在oauth2 Spring Boot中不起作用

Spring Boot 2.2.2 - Prometheus 在 Actuator 中不起作用

多模块组件扫描在Spring Boot中不起作用

注释CrossOrigin在Spring Boot中不起作用

我的BeanPostProcessor在Spring Boot中不起作用

Spring Boot - @Autowired 在 @Service 中不起作用

自定义MessageConverter在Spring Boot中不起作用

Spring Boot Kotlin项目在Eclipse中不起作用

Spring Boot DevTools在Eclipse中不起作用

Spring Boot @Scheduler 在 Google Kubernetes Engine 中不起作用

Primefaces FileUpload在Spring Boot中不起作用

实时重载在Spring Boot devtools中不起作用

事务注释在Spring Boot中不起作用

为什么RestController在Spring Boot中不起作用?

Spring Boot permitAll在WebSecurityConfigurerAdapter中不起作用

CommonsRequestLoggingFilter在Spring Boot应用程序中不起作用

@ConstructorBinding 在 Spring Boot 2.5.4 中似乎不起作用

部署的Spring-Boot战争在Tomcat中不起作用

Spring Boot中的异常处理程序不起作用?

Spring Boot方面在我的API中不起作用

全局CORS配置在Spring Boot中不起作用

Spring Boot Autowired在配置类中不起作用