如何验证与模型/dto实体匹配的JSON请求



我在Spring/JPA中遇到了一个简单的问题。据推测,我有这样的请求格式:

模型/BillDto.java

public class BillDto {
private String desc;
private Long id;
private Integer amount;

public BillDto(String desc, long id, int amount) {
this.desc = desc;
this.id = id;
this.amount = amount;
}
}

或者作为这个json格式的

{
"desc": "String",
"id": 0,
"amount": 0
}

这是控制器

controller/BillController.java

@RequestMapping(method = RequestMethod.POST)
public void create(@RequestBody BillDto billDto) {
billService.create(billDto); // some service to execute
}

然而,当我意外地使用错误的格式请求时,生成的SQL不会执行,因此它返回500代码。例如,

{
"desc": "String",
"id": 0
}

如何在最短的代码行中处理此错误?在将json请求传递给服务之前,我如何验证它以匹配model/dto?

您可以对用@RequestBody注释的BillDto参数使用@Valid注释。这将告诉Spring在进行实际的方法调用之前处理验证。如果验证失败,Spring将抛出一个MethodArgument NotValidException,默认情况下,它将返回一个400(Bad Request(响应。

@RequestMapping(method = RequestMethod.POST)
public void create(@Valid @RequestBody BillDto billDto) {
billService.create(billDto); // some service to execute
}

在POST或PUT请求中,当我们传递JSON负载时,Spring会自动将其转换为Java对象,现在它可以验证生成的对象。

最新更新