在我的pom.xml文件中,我添加了这些延迟的依赖项
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.25.1</version>
</dependency>
并且在我的CustomApplication类中扩展了ResourceConfig
我注册了这2个以下的属性
property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
我有像这样的DTO(POJO)
import java.util.ArrayList;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;
public class PlotDTO {
private String guid;
@NotNull
private String plot_name;
@NotNull
private String farmer_id;
@NotNull
private float distance_from_warehouse;
@NotNull
private int area;
@NotNull
private float sand;
.............
.............
}
在我的资源类中,我正在尝试使用g @Valid
@Path("addplot")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response addPlot(@Valid PlotDTO plot)
{
..............
..............
}
当我发送请求时,这些@NotNull验证都没有工作
有人可以帮助我吗
答案 0 :(得分:2)
@NotNull
注释仅对字符串和包装器有效。它不适用于int,float和boolean等原语,因为它们已经有默认值。
答案 1 :(得分:-2)
请执行以下操作以获得验证。它对我有用。
Validator
,InitializingBean
的类ContextResolver<ValidationConfig>
的类。 实施ExceptionMaper<ConstraintViolationException>
@Component
public class BeanValidator implements Validator,InitializingBean {
private Validator validator;
public void afterPropertiesSet() throws Exception {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.usingContext().getValidator();
}
public boolean supports(Class clazz) {
return true;
}
public void validate(Object target, Errors errors) {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(target);
for (ConstraintViolation<Object> constraintViolation : constraintViolations) {
String propertyPath = constraintViolation.getPropertyPath().toString();
String message = constraintViolation.getMessage();
errors.rejectValue(propertyPath, "", message);
}
}
@Override
public ExecutableValidator forExecutables() {
// TODO Auto-generated method stub
return null;
}
@Override
public BeanDescriptor getConstraintsForClass(Class<?> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T unwrap(Class<T> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validate(T arg0, Class<?>... arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validateProperty(T arg0, String arg1, Class<?>... arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> Set<ConstraintViolation<T>> validateValue(Class<T> arg0, String arg1, Object arg2, Class<?>... arg3) {
// TODO Auto-generated method stub
return null;
}
}
2. Jersey configuration Classes.
@Provider
public class ValidationConfigurationContextResolver implements ContextResolver<ValidationConfig> {
@Context
private ResourceContext resourceContext;
/**Get a context*/
@Override
public ValidationConfig getContext(Class<?> type) {
final ValidationConfig config = new ValidationConfig();
config.constraintValidatorFactory(resourceContext.getResource(InjectingConstraintValidatorFactory.class));
config.parameterNameProvider(new CustomParameterNameProvider());
return config;
}
private class CustomParameterNameProvider implements ParameterNameProvider {
private final ParameterNameProvider nameProvider;
public CustomParameterNameProvider() {
nameProvider = Validation.byDefaultProvider().configure().getDefaultParameterNameProvider();
}
@Override
public List<String> getParameterNames(final Constructor<?> constructor) {
return nameProvider.getParameterNames(constructor);
}
@Override
public List<String> getParameterNames(final Method method) {
return nameProvider.getParameterNames(method);
}
}
}
如果你使用maven,你可以使用ValidationMessages.properties放入资源路径来实现内化和本地化。请参阅以下链接Github- bean-validation-webapp