我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求正文中说一个Pojo。但是,我有一个场景,我有一个get请求,我想验证日期范围:我的开始日期和结束日期为@requestparams
。我该如何验证这些?
还有一个验证器适用于相同的@restcontroller
:对于发布请求,请说Employeevalidtor
。我可以为同一@restcontroller
中的不同对象调用多个验证器吗?
答案 0 :(得分:0)
您可以使用单独的验证器,但必须通过传递要验证的相应对象来手动实例化。
答案 1 :(得分:0)
我假设您正在讨论请求绑定验证。对于this post
中提到的@RequestParam和@PathVariables的Spring Validators,可以获得相同的验证。在此处添加相关内容。控制器看起来像这样:
@RestController
@Validated
public class RegistrationController {
@RequestMapping(method = RequestMethod.GET,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
@ResponseStatus(HttpStatus.OK)
public Map search(@Email @RequestParam("email") String email) {
return emailMessage(email);
}
}
注意类级别的@Validated方法(也可以在方法级别声明)。
答案 2 :(得分:0)
让 Spring MVC 将您的请求参数映射到封装所有相关输入的 pojo,然后为此添加一个验证器。
@RestController
@RequestMapping("/myUrl")
public class MytController {
private final MyIntervalValidator validator;
@InitBinder
public void initBinder(WebDataBinder binder){
binder.setValidator(validator);
}
@GetMapping
public void doSomthing(@Valid @RequestParam MyInterval interval){...}
class MyInterval implements Serializable{
private Date startDate;
private Date endDate;
}
import org.springframework.validation.Validator;
class MyIntervalValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return MyInterval.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
final MyInterval params = (MyInterval) target;
....
}
}