springMVC validated,怎么校验Controller的请求里的成员变量里的字段?

图片描述

RT.
我想校验InnerValidatedRequest这个请求里,InnerValidatedRequestData成员对象里面的字段houseName和houseAddress,用SpringMVC的@Validated注解的话,还需要在其他的什么地方加上什么啊?
只是现在这样的话,试了下并没有校验到这两个参数。。

--------------------- 部分代码如下 ----------------------

CommonController.java

@RestController
@RequestMapping(consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8")
public class CommonController {
    /**
     * test for nested inner @Validated
     * 这里Exception统一在外部处理
     */
    @PostMapping("/inner/validated")
    public String innerValidated(@RequestBody @Validated InnerValidatedRequest request) {
        
        return "GOT!";
    }
}

InnerValidatedRequest.java

@Getter
@Setter
public class InnerValidatedRequest extends BaseUserRequest {

    private InnerValidatedRequestData reqData;

    private String otherParma1;
    private String otherParma2;
}

InnerValidatedRequestData.java

@Getter
@Setter
public class InnerValidatedRequestData implements BaseRequestData {

    @NotBlank(message = "小区名称不能为空")
    private String houseName;
    @NotBlank(message = "房屋地址不能为空")
    private String houseAddress;
}

问这个问题,主要是因为这边有好多接口是要向后台系统发送http请求的,如果能有个对象能直接变成发送的请求,能减少好多工作。比如,我能直接把InnerValidatedRequestData作为请求发送到后台系统去获取想要的数据。。

阅读 4.8k
2 个回答

嵌套校验?试试在reqData变量上加@Valid(javax.validation.Valid),如下:

@Valid
private InnerValidatedRequestData reqData;

补充:其实可以看一下javax.validation包,像constraints就是常用的用于校验一般属性的注解,而javax.validation.Valid的源码注释如下:

/**
 * Marks a property, method parameter or method return type for validation cascading.
 * <p/>
 * Constraints defined on the object and its properties are be validated when the
 * property, method parameter or method return type is validated.
 * <p/>
 * This behavior is applied recursively.
 *
 * @author Emmanuel Bernard
 * @author Hardy Ferentschik
 */

中文翻译:

/**
 * 标记属性、方法参数或方法返回值为递归校验。
 * <p/>
 * 该约束规定,当指定的属性、方法参数或方法返回值被校验的时候,同时校验对应对象本身和其属性。
 * <p/>
 * 该行为会递归应用。
 */

符合要求。

使用Hiberate的验证的注解会在 hibernate-validator-.jar 和 validation-api-.jar 里面。

除了常用的为空,大小等验证外,你还可以自定义验证注解来满足实际的业务逻辑。

默认的验证错误信息会在 BindingResult bindingResult 里面

SPRING BOOT VALIDATION 验证

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题