我一直在寻找一段时间没有运气.我没有使用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启用输入验证?
我试图在hibernate验证4.1中覆盖默认的ResourceBundleLocator.到目前为止,它完美地运行,但其使用的唯一示例包括用于实例化ValidationFactory的Java代码.
当使用具有spring hibernate的web应用程序时,会自动配置验证(只应存在合适的hibernate验证*.jar文件并自动使用).如何在该场景中替换ResourceBundleLocator?我没有看到在任何属性或applicationContext.xml文件中规划我的自定义ResourceBundleLocator的方法.
什么之间的区别@Max和@DecimalMax,和@Min和@DecimalMin在Hibernate验证?
看看Javadocs,他们似乎正在执行相同的约束.
我正在使用spring mvc 3.0创建一个演示应用程序.我必须在屏幕上应用验证.我在网上搜索并发现该应用程序主要使用两种类型的验证: -
希望有人给我一个建议,在应用程序中实现哪一个是好的.
我在我的项目中使用spring 4.1,hibernate验证器5.1.3.我一直试图让GroupSequence从最近2天开始工作.我已经参考了验证文档,博客和stackoverflow上发布的一些问题.
请看下面的课程.当我从注释中删除GroupSequence和groups时,所有验证消息都会出现在一起,即对名称和其他字段的所有检查都会一起触发.让我们说对于名称字段 - 我希望首先验证@NotBlank和@Size,然后名称应该与模式匹配,最后应该检查@UniqueName,因为数据库调用.
为此,我按照文档和答案的建议创建了GroupSequence.但是当激活验证时,只会为名称触发@NotBlank和@Size.当我从剩余的注释中删除组值时,它们开始工作但是所有错误消息都会立即显示,这是我不想要的.
我希望使用组指定的注释First.class在Second.class验证之前一起触发.我不明白为什么用组指定的验证没有被解雇.
有人可以指导我.
@GroupSequence({MyForm.class, OrderedChecks.class})
public class MyForm {
@NotBlank
@Size(min = 2, max = 40)
@Pattern(regexp = "^[\\p{Alnum} ]+$", groups = First.class)
@UniqueName(groups = Second.class)//Custom validation
private String name;
@NotBlank
@Size(min = 2, max = 40)
private String url;
@NotBlank
@Size(max = 100)
private String imagePath;
//Custom Validation
@CheckContent(acceptedType = <someString>, allowedSize=<someval>, dimensions=<someval> groups = Second.class)
private MultipartFile image
...
}
@GroupSequence(value = {Default.class, First.class, Second.class})
public interface OrderedChecks {}
@Controller
@RequestMapping(value = "/myForm") …Run Code Online (Sandbox Code Playgroud) 我无法获得验证工作.我有这个简单的端点,它是Spring Boot应用程序的一部分:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response create(@Valid UserDTO userDTO, @Context UriInfo uriInfo) {
User user = UserParser.parse(userDTO);
userService.save(user);
final URI uri = uriInfo.getAbsolutePathBuilder().path(String.valueOf(user.getId())).build();
return Response.created(uri).build();
}
Run Code Online (Sandbox Code Playgroud)
然后,UserDTO验证:
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserDTO {
private Long id;
// redundant validations, for testing
@NotNull
@Size(min = 5, max = 80, message = "First name too short")
@NotBlank(message = "First name blank")
@NotEmpty(message = "First name empty")
private String firstName;
@NotNull
@Size(min = 2, max = 80, message = "Last name …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用招摇来记录我的休息api,并且我已经取得了一些成功,但是当涉及到约束资源参数时,我正在碰壁.我正在使用JBoss RESTEasy与hibernate验证器提供程序和Jackson 2.x注释POJO.我遇到的问题是遇到@ DecimalMin/@ DecimalMax注释时我得到了一个
java.lang.NoSuchMethodError: javax.validation.constraints.DecimalMin.inclusive()Z
Run Code Online (Sandbox Code Playgroud)
似乎swagger正在尝试使用更新版本的javax.validation.constraints.*(v1.1.0.Final)库,而jboss正在使用旧版本(v1.0.0.GA).我已经尝试了所有我能想到的东西,包括适当的库无济于事.
环境是JBoss EAP 6.4.0.GA
我的招摇条目(pom.xml):
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
示例POJO代码段:
...
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
...
@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"altM",
"altDatum"
})
public class Altitude {
@JsonProperty("altM")
@DecimalMin("-2000")
@DecimalMax("10000")
@NotNull
private Double altM;
...
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西,但是我学到的东西越多,我相信以下是我理解依赖关系的两个最相关的尝试:
尝试1:从hibernate验证器中排除javax.validation并让swagger包含它:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>3.0.16.Final</version>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
尝试2:显式包含javax.validation v1.1.0.Final:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Maven依赖树(尝试1):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ MissionPlanningService ---
[INFO] mil.army.cerdec.cpi.mcas:MissionPlanningService:war:0.0.2-SNAPSHOT
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.16.Final:compile
[INFO] | +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.0.Final:compile
[INFO] …Run Code Online (Sandbox Code Playgroud) 救命,
我如何在Scala中执行以下操作?
import org.hibernate.validator.constraints.ScriptAssert
@ScriptAssert.List({
@ScriptAssert(script = "...", lang = "javascript"),
@ScriptAssert(script = "...", lang = "javascript")})
Run Code Online (Sandbox Code Playgroud) annotations scala hibernate-validator scala-2.8 bean-validation
我需要验证存储在表单bean对象列表中的对象.
下面是我的表单bean对象.
public class Role implements java.io.Serializable {
// Fields
private int roleId;
@NotBlank
private String roleName;
private boolean active;
@Valid
private List<Module> modules;
// getters anfd setters
}
Run Code Online (Sandbox Code Playgroud)
以下是我的主要表单bean对象列表中的对象
public class Module implements Serializable {
private int id;
@NotBlank
private String moduleName;
// other properties and getters and setters
}
Run Code Online (Sandbox Code Playgroud)
下面是我的属性文件
# -- Role form --
NotBlank.role.roleName=Role Name can not be blank.
NotBlank.module.moduleName=Module Name can not be blank.
Run Code Online (Sandbox Code Playgroud)
下面是My JSP页面,该表单由角色名称和可添加到角色的模块组成.
<table border="0" class="section_tbl2">
<tr>
<td width="150px" valign="top">
<spring:message code="dmx.role.form.label.name"/> …Run Code Online (Sandbox Code Playgroud) 控制器方法:
public Mission createMission(final @Valid @RequestBody Mission mission) {
//save..
return mission;
}
Run Code Online (Sandbox Code Playgroud)
我想将所有验证错误消息枚举为 json 并返回。
我可以通过创建一个新的异常类来做到这一点,在控制器方法参数中添加 BindingResult,当绑定结果有错误时抛出新的异常并在 @ControllerAdvice 类中处理异常。
if (bindingResult.hasErrors()) {
throw new InvalidRequestException("Fix input and try again", bindingResult);
}
Run Code Online (Sandbox Code Playgroud)
但我想避免在每个控制器方法中检查 BindingResult,而是全局处理。如果我可以处理异常,我可以做到这一点:org.springframework.web.bind.MethodArgumentNotValidException。但不幸的是 Spring Boot 不允许
@ExceptionHandler(MethodArgumentNotValidException.class)
Run Code Online (Sandbox Code Playgroud)
它显示了不明确的异常处理程序,因为处理了相同的异常 ResponseEntityExceptionHandler,并且我无法覆盖 handleException,因为它是最终的。我尝试通过捕获 Exception.class 来覆盖受保护的 ResponseEntity handleMethodArgumentNotValid(),但这根本没有被调用。
有没有办法实现这个目标?对于一个简单的任务来说,这似乎有很多事情:(
java ×5
spring ×4
spring-mvc ×3
validation ×3
spring-boot ×2
annotations ×1
aop ×1
hibernate ×1
java-ee ×1
jboss ×1
jersey ×1
maven ×1
scala ×1
scala-2.8 ×1
swagger ×1