Java 如何在SpringRESTAPI中验证@requestparam中的依赖参数?
我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求正文中说一个Pojo。但是,我有一个场景,其中我有一个get请求,我想验证一个日期范围:我有一个开始日期和结束日期,分别为Java 如何在SpringRESTAPI中验证@requestparam中的依赖参数?,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求正文中说一个Pojo。但是,我有一个场景,其中我有一个get请求,我想验证一个日期范围:我有一个开始日期和结束日期,分别为@requestparams。我应该如何验证这些 还有一个用于相同的@restcontroller:对于post请求,比如Employeevalidtor。我可以为同一@restcontroller中的不同对象调用多个验证器吗?您可以使用单独的验证器,但它们必须通过传递要验证的相应对象来手动实例化。您可以使用单独的
@requestparams
。我应该如何验证这些
还有一个用于相同的
@restcontroller
:对于post请求,比如Employeevalidtor
。我可以为同一@restcontroller
中的不同对象调用多个验证器吗?您可以使用单独的验证器,但它们必须通过传递要验证的相应对象来手动实例化。您可以使用单独的验证器,但它们必须通过传递相应对象来手动实例化待验证。我想您谈论的是请求绑定验证。对于@RequestParam和@PathVariables,可以使用Spring验证器获得相同的验证,如中所述
在这里添加相关部分。控制器的外观如下所示:
@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方法(也可以在方法级别声明)。我假设您讨论的是请求绑定验证。对于@RequestParam和@PathVariables,可以使用Spring验证器获得相同的验证,如中所述 在这里添加相关部分。控制器的外观如下所示:
@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方法(也可以在方法级别声明)。让Spring MVC将您的请求参数映射到封装所有相关输入的pojo,然后为此添加一个验证器
@RestController
@请求映射(“/myUrl”)
公共类MytController{
私人最终MyInterValidator验证器;
@InitBinder
公共绑定器(WebDataBinder绑定器){
binder.setValidator(验证器);
}
@GetMapping
public void doSomthing(@Valid@RequestParam MyInterval){…}
import org.springframework.validation.Validator;
类MyIntervalValidator实现验证器{
@凌驾
公共布尔支持(类clazz){
返回MyInterval.class.isAssignableFrom(clazz);
}
@凌驾
公共无效验证(对象目标、错误){
最终MyInterval参数=(MyInterval)目标;
....
}
}
让Spring MVC将您的请求参数映射到封装所有相关输入的pojo,然后为此添加一个验证器
@RestController
@请求映射(“/myUrl”)
公共类MytController{
私人最终MyInterValidator验证器;
@InitBinder
公共绑定器(WebDataBinder绑定器){
binder.setValidator(验证器);
}
@GetMapping
public void doSomthing(@Valid@RequestParam MyInterval){…}
import org.springframework.validation.Validator;
类MyIntervalValidator实现验证器{
@凌驾
公共布尔支持(类clazz){
返回MyInterval.class.isAssignableFrom(clazz);
}
@凌驾
公共无效验证(对象目标、错误){
最终MyInterval参数=(MyInterval)目标;
....
}
}
因此,我可以将employeevalidator绑定到EmployedTo,并在请求参数中传递。在@restcontroller get方法中,对于请求参数,我可以使用这些请求参数创建一个点。此日期范围可以有一个验证器。它确实验证了日期范围,并在验证器的validate方法中添加了错误。但是idn不会抛出错误的请求错误并继续处理。如果你有一个示例,你能提供吗?这样我就可以将employeevalidator绑定到EmployedTo,并在请求参数中传递。在@restcontroller get方法中,对于请求参数,我可以使用这些请求参数创建一个点。此daterangedto可以有一个validator、 它确实验证了日期范围并在验证器的验证方法中添加了错误。但是它没有抛出错误的请求错误并继续处理。如果你有一个例子,你能提供吗?
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;
....
}
}