Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringRESTAPI中验证@requestparam中的依赖参数?_Java_Spring_Validation_Spring Mvc - Fatal编程技术网

Java 如何在SpringRESTAPI中验证@requestparam中的依赖参数?

Java 如何在SpringRESTAPI中验证@requestparam中的依赖参数?,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求正文中说一个Pojo。但是,我有一个场景,其中我有一个get请求,我想验证一个日期范围:我有一个开始日期和结束日期,分别为@requestparams。我应该如何验证这些 还有一个用于相同的@restcontroller:对于post请求,比如Employeevalidtor。我可以为同一@restcontroller中的不同对象调用多个验证器吗?您可以使用单独的验证器,但它们必须通过传递要验证的相应对象来手动实例化。您可以使用单独的

我知道春天有验证器。但是,这些验证器只能绑定到单个对象。在请求正文中说一个Pojo。但是,我有一个场景,其中我有一个get请求,我想验证一个日期范围:我有一个开始日期和结束日期,分别为
@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;
        ....
    }
}