我应该如何验证spring Rest API中@requestparam中的依赖参数



我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求体中说一个Pojo。然而,我有一个场景,我有一个get请求,我想验证一个日期范围:我有一个开始日期和结束日期作为@requestparams。我应该如何验证这些?

也有一个验证器应用于相同的@restcontroller:对于post请求,说Employeevalidtor。我可以为同一个@restcontroller中的不同对象调用多个验证器吗?

您可以使用单独的验证器,但它们必须通过传递相应的要验证的对象来手动实例化。

我假设您正在谈论请求绑定验证。本文

中提到的使用Spring validator对@RequestParam和@PathVariables也可以获得相同的验证。

在这里添加相关的部分。控制器看起来像这样:

@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
@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;
        ....
    }
}

最新更新