javax框架之@Valid对象嵌套的效验

在开发过程中大家肯定都会校验前端传递参数,比如是否为空,长度等等

今天就在这里对java bean的参数校验做一个深入的使用,相信如果服务端提供的接口请求类型Content-type如果是json的接口,就会存在一个复杂json的一个校验问题,下面举一个例子:

{
    "name":"测试活动123",
    "phone":"123",
    "address":{
        "province":"省",
        "city":"市"
    }
}

对于这种的json我想要校验province和city是否为空,你在各自的bean里面定义@NotBlank这样是没有用的,错误例子:

public class UserParam {
	private String name;
        @NotBlank(message = "phone不能为空")
	private String phone;
        @NotBlank(message = "address不能为空")
	private Address address;
         ...getset


public class Address{
@NotBlank
private String province;
@NotBlank
private String city;
...getset

controller层

public String test(@Valid @RequestBody UserParam param){
 ...
}

接下来来分析下问题,我们先看下@Valid这个注解,注意他是可以放到FIELD上的,这就是嵌套的bean的重点

@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface Valid {
}

下面正确嵌套bean校验的做法,只需要在UserParam类中的Address上加@Valid注解就可以解决类,如下:

public class UserParam {
	private String name;
        @NotBlank(message = "address不能为空")
	private String phone;
        @Valid
	private Address address;
         ...getset
ok问题解决了。。。



版权声明:本文为w15868676598原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。