我一直在寻找一段时间没有运气.我没有使用Spring MVC,但仍想使用它@javax.validation.Valid来启用方法参数的验证.举个例子
public class EventServiceImpl implements IEventService {
@Override
public void invite(@Valid Event event, @Valid User user) { ... }
}
Run Code Online (Sandbox Code Playgroud)
使用MVC,这对带@Controller注释的bean的启用很简单<mvc:annotation-driven/>(参见5.7.4.3配置JSR-303验证器供Spring MVC使用).
使用AOP应该是非常简单的.不过,我怀疑有一些标准的方法可以做到这一点.因此,问题是:对于非MVC应用程序和非控制器bean,是否存在类似的事情,以便为带注释的bean启用输入验证?
我正在研究 Microanut 版本 1.2.0,并试图找到一种方法来避免对作为对外部 API 的响应而形成的 bean 中可能存在的数据不一致进行冗余检查。我的想法是验证 bean,并且验证步骤还应该验证 bean 的实例变量是否存在可能的违规。
例如,我有一个有地址字段的学生班级。
学生.java
@Data
@Builder
@Introspected
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@NotNull
String id;
String name;
Address address;
}
Run Code Online (Sandbox Code Playgroud)
地址.java
@Data
@Builder
@Introspected
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@NotNull
String houseNumber;
String city;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我对 Student 类型的实例进行 bean 验证时,我想介绍实例变量address的验证。因此,在这种情况下,对于 null Student.id 和 null Address.houseNumber,单次验证应该给出错误。然而,就我而言,我只收到一个错误,即 Student 实例中的 Null id 错误。
学生测试.java
@Test
public void checkIfValidationsAreWorking() {
System.out.println("Tests Started");
// HouseNumber will be Null
Address address = Address.builder()
.city("Delhi") …Run Code Online (Sandbox Code Playgroud) 我正在使用表单验证实现示例Spring MVC表单。我有一个复杂的类型Address作为Student表单bean的bean属性。并且我@NotEmpty为Addressbean属性添加了表单验证。但是,UI中并未反映出同样的情况。但是表单验证适用于其他原始类型的Student表单bean。
所以,验证完全适用于Student表单bean而不是嵌套复杂类型,如Address内Student的form bean。
我正在尝试了解原因和解决方法。
春季版本4.0+。休眠验证器API:5.2.4
Student POJO:
package com.xyz.form.beans;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
import com.xyz.validators.DateNotEmpty;
import com.xyz.validators.ListNotEmpty;
public class Student {
@Size(min = 2, max = 30)
private String firstName;
@Size(min = 2, max = 30)
private String lastName;
@NotEmpty
private String gender;
@DateNotEmpty
@Past
private Date DOB;
private String email;
private String mobileNumber;
@ListNotEmpty
private List<String> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Spring Validator 验证 POST 请求。这是我要验证的对象:
@Validated
public class Request implements Serializable {
private static final long serialVersionUID = 1L;
private Long id1;
private Long id2;
private String s;
private List<Mapping> mappings;
public Request() {}
public Request (Long id1, Long id2, String s, List<Mapping> mappings) {
this.id1 = id1;
this.id2 = id2;
this.s = s;
this.mappings = mappings;
}
//getter() and setter() methods.
}
Run Code Online (Sandbox Code Playgroud)
这是映射类:
@Validated
public class Mapping implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty(value="id") …Run Code Online (Sandbox Code Playgroud) java spring spring-validator spring-boot spring-restcontroller