Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 我们可以根据请求参数向请求正文添加验证吗_Java_Spring_Spring Rest_Spring Validator - Fatal编程技术网

Java 我们可以根据请求参数向请求正文添加验证吗

Java 我们可以根据请求参数向请求正文添加验证吗,java,spring,spring-rest,spring-validator,Java,Spring,Spring Rest,Spring Validator,我有一个REST端点,它接受请求主体中的一个对象和一个请求参数。当传递请求参数时,我需要验证对象的所有属性(如果不是参数的话) 采用指定的默认值,只需验证2个属性。对于这两种情况,路径必须相同。如何做到这一点 目前,我已经检查了对象的模式、长度和可能值,并在注释的帮助下进行了验证 -----更新类------- @ValidateParent(parent=“parent”,child=“child”) 公共阶级{ @NotNull(组={FrstValidator.class,SndValid

我有一个REST端点,它接受请求主体中的一个对象和一个请求参数。当传递请求参数时,我需要验证对象的所有属性(如果不是参数的话) 采用指定的默认值,只需验证2个属性。对于这两种情况,路径必须相同。如何做到这一点

目前,我已经检查了对象的模式、长度和可能值,并在注释的帮助下进行了验证

-----更新类-------

@ValidateParent(parent=“parent”,child=“child”)
公共阶级{
@NotNull(组={FrstValidator.class,SndValidator.class})
@模式(regexp=“^[a-zA-Z]{3}$”,
组={FrstValidator.class,SndValidator.class})
字符串str1;
@NotNull(组={FrstValidator.class,SndValidator.class})
@模式(regexp=“^[a-zA-Z]{3}$”,
组={FrstValidator.class,SndValidator.class})
字符串str2;
@模式(regexp=“^[a-zA-Z]{10}$”,
组=SndValidator.class)
串子;
@模式(regexp=“^[a-zA-Z]{10}$”,
组=SndValidator.class)
字符串父级;
@模式(regexp=“^[a-zA-Z]{10}$”,
组=SndValidator.class)
字符串str3;
}

ValidateParent
,检查在请求正文中传递子项时是否也传递了父项。

您可以使用验证组和两个独立的端点,通过请求参数的存在来区分,以优雅的“Spring方式”实现您的目标:

验证组:

// Validation groups are just marker interfaces
private interface PartialValidation {}
private interface FullValidation {}
// This endpoint is executed only if there is no myParam preprovided
@PostMapping(
    value = "/validation",
    params = "!myParam")
public void partialValidation(
    @RequestParam(defaultValue = "DEFAULT") String myParam,
    // Request is validated against the PartialValidation group
    @RequestBody @Validated(PartialValidation.class) Request request) {

    System.out.println("Partial validation");
}

// This endpoint is executed only if there is myParam preprovided
@PostMapping(
    value = "/validation",
    params = "myParam")
public void fullValidation(
    @RequestParam String myParam,
    // Request is validated against the FullValidation group
    @RequestBody @Validated(FullValidation.class) Request request) {

    System.out.println("Full validation");
}
请求DTO:

// Validation groups are just marker interfaces
private interface PartialValidation {}
private interface FullValidation {}
// This endpoint is executed only if there is no myParam preprovided
@PostMapping(
    value = "/validation",
    params = "!myParam")
public void partialValidation(
    @RequestParam(defaultValue = "DEFAULT") String myParam,
    // Request is validated against the PartialValidation group
    @RequestBody @Validated(PartialValidation.class) Request request) {

    System.out.println("Partial validation");
}

// This endpoint is executed only if there is myParam preprovided
@PostMapping(
    value = "/validation",
    params = "myParam")
public void fullValidation(
    @RequestParam String myParam,
    // Request is validated against the FullValidation group
    @RequestBody @Validated(FullValidation.class) Request request) {

    System.out.println("Full validation");
}
@数据
私有静态类请求{
//此字段将仅对FullValidation组进行验证
@NotNull(组=FullValidation.class)
字符串字段1;
//将为两个验证组验证此字段
@NotNull(组={FullValidation.class,PartialValidation.class})
字符串字段2;
}
控制器:

// Validation groups are just marker interfaces
private interface PartialValidation {}
private interface FullValidation {}
// This endpoint is executed only if there is no myParam preprovided
@PostMapping(
    value = "/validation",
    params = "!myParam")
public void partialValidation(
    @RequestParam(defaultValue = "DEFAULT") String myParam,
    // Request is validated against the PartialValidation group
    @RequestBody @Validated(PartialValidation.class) Request request) {

    System.out.println("Partial validation");
}

// This endpoint is executed only if there is myParam preprovided
@PostMapping(
    value = "/validation",
    params = "myParam")
public void fullValidation(
    @RequestParam String myParam,
    // Request is validated against the FullValidation group
    @RequestBody @Validated(FullValidation.class) Request request) {

    System.out.println("Full validation");
}

您好,如果请求参数已传递(由用户传递),且其值与默认值相同,则应为
@RequestBody
:所有属性都是因为提供了参数,还是只有2-因为它与默认值相同?:)这些可能会对您有所帮助:我已经更新了请求类和应用的验证。我认为这可以让你对这个问题有一个更好的了解。