我在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对象,现在它可以验证生成的对象。