java是否有一种声明性的方法来验证请求参数,取决于请求字段之一?
我正在寻找类似JSR-303验证组的东西(bean Validation,当您在控制器中用@Validated(GroupName.class)标记方法参数,并在需要的地方在请求类字段中指定group时),但它应该根据其中一个请求字段来决定如何在运行时进行验证
例如,如果我们有这样的控制器类
@Controller
public class MyController {
@Autowired
private MyService myService;
@ResponseBody
@RequestMapping(value = "/path", method = RequestMethod.PUT)
public ResponseVo storeDetail(/*maybe some annotation here*/ DetailRequestVo requestVo) {
return myService.storeDetail(requestVo);
}
class DetailRequestVo {
String type;
Long weight;
Long radius;
}
}
我们希望根据类型字段值进行验证:如果type=“wheel”,则应显示半径和重量字段,如果type=“engine”,则仅应显示重量字段
Spring(从3.2.17开始)是否提供了API以更具声明性的方式实现这些规则?组织。springframework。验证。验证器在这里看起来不是一个选项,因为它的方法boolean supports(Class<?> clazz)
是基于类信息而不是实例信息来决定的
提前谢谢
# 1 楼答案
不确定Spring,但您可以使用简单的JSR-303,使用类本身的自定义验证器来实现这一点。。。就像
就像
由于自定义验证器可以访问整个DetailRequestVo对象,因此您可以根据字段B等对字段A进行检查