Java 如何使用Hibernate验证程序验证重写的方法参数?
关于,我了解到,如果我有实现GroupManager并重写其方法的GroupService,那么我就不能使用验证约束进行注释,因为Hibernate Validator不允许使用它(结果被称为验证约束)。我的意思是做类似的事情Java 如何使用Hibernate验证程序验证重写的方法参数?,java,validation,constraints,hibernate-validator,Java,Validation,Constraints,Hibernate Validator,关于,我了解到,如果我有实现GroupManager并重写其方法的GroupService,那么我就不能使用验证约束进行注释,因为Hibernate Validator不允许使用它(结果被称为验证约束)。我的意思是做类似的事情 public class GroupService implements GroupManager{ @Override public List<String> findUsersInGroup(@NotNull String groupNa
public class GroupService implements GroupManager{
@Override
public List<String> findUsersInGroup(@NotNull String groupName) {
...
}
}
public类GroupService实现GroupManager{
@凌驾
公共列表FindUsersingGroup(@NotNull字符串groupName){
...
}
}
然后会引发一个ConstraintDeclarationException
,对吗?因此,解决方案显然是在接口上设置这些约束,但在这种情况下:
GroupManager
属于Spring-Security
)。那我怎么做呢Hibernate-Validator
迫使我“弄脏”接口<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
<default-package>org.springframework.security.provisioning</default-package>
<bean class="GroupManager" ignore-annotations="true">
<method name="findUsersInGroup">
<parameter type="java.lang.String">
<constraint annotation="javax.validation.constraints.NotNull"/>
</parameter>
</method>
</bean>
</constraint-mappings>
在这种情况下,将使用合法的客户端代码
Container container = ....;
Element firstElement = container.getElements().iterator().next();
因为契约说它返回一个非空集合
如果我们更改javadoc并因此更改post条件
/**
* @return a collection of elements.
*/
public Collection<Element> getElements();
/**
*@返回元素集合。
*/
公共集合getElements();
以前合法的客户端代码将不再有效
我只是做了这个例子来告诉你合同和方法签名之间的区别
可以找到详细且非常好的解释
由于GroupManager javadoc不限制该参数,因此法律impl必须处理所有情况'?这是验证方法中的参数吗
对。如果接口没有对参数添加任何限制,则实现必须处理每个状态,因为客户端可能会传递参数
在任何州
/**
* @return a collection of elements.
*/
public Collection<Element> getElements();