【发布时间】:2021-02-07 13:17:27
【问题描述】:
问题:是否可以验证请求正文的 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");
}
解决此问题的最有效方法是什么?某种注释?或者也许是 Spring 启动配置?
谢谢
【问题讨论】:
标签: java json spring-boot