春靴 - 验证@RequestBody
2022-09-03 00:51:47
问:是否可以验证请求正文的 JSON 有效负载,而无需专门编写 if 语句?也许通过注释或配置?
我有一个非常简单的POJO:
public class Foo {
private int important;
private String something;
//constructors, getter, seters, toString
}
还有一个非常简单的控制器类:
@SpringBootApplication
@RestController
public class QuestionController {
public static void main(String[] args) {
SpringApplication.run(QuestionController.class, args);
}
@GetMapping(value = "/question")
Mono<String> question(@RequestBody Foo foo) {
System.out.println("The object foo, with value for important = " + foo.getImportant() + " and something = " + foo.getSomething());
return Mono.just("question");
}
}
如果我使用有效负载进行查询,例如:
{
"important": 42,
"something": "value"
}
一切都很好,非常满意。
但是,如果有拼写错误:(请注意“重要”上的拼写错误)
{
"importantWithTypo": 42,
"something": "value"
}
或者缺少所需的“重要”(请注意,JSON甚至不完整)
{
"something": "value"
}
请求和计算仍然有效!而“重要”的值为0!
我不希望Spring默认为0,并认为一切都很好。
我也不想将我的类型从基元更改为盒装对象。
没有我写这样的东西:
@GetMapping(value = "/question")
Mono<String> question(@RequestBody Foo foo) {
if (0 == foo.getImportant()) {
throw new IllegalArgumentException();
}
System.out.println("The object foo, with value for important = " + foo.getImportant() + " and something = " + foo.getSomething());
return Mono.just("question");
}
解决此问题的最有效方法是什么?某种注释?或者也许是弹簧启动配置?
谢谢