我正在使用春季靴子。我想验证POST请求参数。所以我通过@Validated注释获得了热情,但这需要为Every API创建一个不同的类。我该如何编写代码?
例如,这是我的api
@RequestMapping("/tags/{tagId}/{tagParentId}")
public Response<Demo> a(@PathVariable int tagId, @PathVariable int tagParentId){
... code
}
@RequestMapping("/data/{courseId}/{instId}")
public Response<Demo> b(@PathVariable int courseId, @PathVariable int instId){
... code
}
我应该如何更改代码以为API添加params验证,这样我就不需要创建两个不同的验证类?只有一个类,然后我可以为不同的API添加不同的功能。
答案 0 :(得分:1)
应该使用@Validated来检查参数是否语法正确。
当你使用int值时,这已经由spring完成了。 如果tagId不是有效的int,则客户端将已收到Http错误代码。
验证是否存在具有给定tagId的标记在您的代码中隐式完成,您不需要额外的验证器。
如果您从数据库中读取标签,并且找不到tagId的标签,则应该
return new ResponseEntity(HttpStatus.NOT_FOUND);
来自您的控制器方法。
您可能需要将控制器方法的返回类型更改为公共超类或仅更改为Object,以允许返回ResponseEntity。
它也可以在控制器方法中抛出异常,并配置spring以返回关于HttpStatus的内容。 见exception-handling-for-rest-with-spring