2017-08-29 175 views
0

不工作在我的pom.xml文件中我有這些撂荒依賴也會添加@Valid Bean驗證的球衣

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-bean-validation</artifactId> 
    <version>2.25.1</version> 
    </dependency> 

和延伸ResourceConfig我CustomApplication類我已經註冊了這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; 
............. 
............. 
} 

在我RESOUR CE類我試圖驗證此usingg @Valid

@Path("addplot") 
@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public Response addPlot(@Valid PlotDTO plot) 
{ 
.............. 
.............. 
} 

當我把這些@NotNull驗證請求沒有一個正在

能有人幫我這個

+0

它適用於所有人還是僅僅是原始人? –

+0

其中一些是必填字段。它與基元無關 –

+3

我的觀點是基元不能爲空。 –

回答

1
@NotNull 

註釋僅適用於字符串和包裝有效。它不會在int,float和boolean等基元上工作,因爲它們已經有了默認值。

-2

請執行以下操作得到驗證。這個對我有用。

  1. 類實現ValidatorInitializingBean春季
  2. 班新澤西配置實現ContextResolver<ValidationConfig>
  3. 類如果你使用maven可以實現通過ValidationMessages.properties投入資源路徑內化和國產化實施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); 
         } 
        } 
    } 
    

    。請參考以下鏈接Github- bean-validation-webapp

+1

_「基本澤西島不能直接理解@Valid註釋。」_ == False。 –

+0

Hi @peeskillet,以上解決方案適用於我。如果不使用上述類,球衣不能使用'javax.validation'註釋進行驗證。你可以參考上面的github項目進一步澄清。 –

+0

問題是我沒有使用Spring框架 –