1

我有以下几点:Bean验证对象转换成RequestParam @RequestBody

@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<LoginResponse> getLoginStatus(@Valid LoginRequest loginRequest){ 
     //some stuff here 
} 

loginRequest paramater是@RequestParam,但是,因为它是一个自定义对象时,@RequestParam注释的对象的前面不需要。问题是,当任何bean验证注释放在自定义对象的前面时,该对象将转换为一个主体参数(@RequestBody),但我们希望验证该对象是请求参数,而不是主体参数。

任何人都可以帮助我吗?

+0

你已经看过Spring中的@Validated注解吗? [这里](https://sdqali.in/blog/2015/12/04/validating-requestparams-and-pathvariables-in-spring-mvc/)就是一个例子。 – Rlarroque

+0

它是一个自定义对象的事实与您有(或不)添加'@ RequestParam'注释的事实无关。现在发生的事情是,spring会创建一个类的实例并进行一些绑定(大部分与@ ModelAttribute相同)。如果您使用'@ RequestParam',它会尝试将请求参数转换为给定的使用'Converter'或自定义'HandlerMethodArgumentResolver'的'LoginRequest'对象。基本上你对发生的事情的理解是关闭的。 –

+0

我不明白。 Juste使用Valid @ModelAttribute LoginForm loginForm – amdev

回答

0

为什么LoginRequest属性成为RequestBody的一部分,而不是RequestParameters了究其原因,是由于2.6.1版本springfox-swagger。升级到版本2.7.0为我们解决了这个问题。