我应该如何在spring Rest API中验证@requestparam中的相关参数?

时间:2016-09-04 11:17:33

标签: java spring validation spring-mvc

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

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

3 个答案:

答案 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;
        ....
    }
}