Spring controller does not call @Valid

I know this question has been asked several times here, but I could not find the answer to help me

I'm trying to use annotation @Validon my controller, but spring doesn't seem to want to do anything with it

That's what I'm doing:

Versions:

<org.springframework-version>4.0.5.RELEASE</org.springframework-version>
<hibernate-annotations-version>3.5.6-Final</hibernate-annotations-version>

The class I want to check is:

public class myclass{

private int                 id;

@NotEmpty
@Min(20)
private String              title;

@NotEmpty
private String              description;
}

Controller Signature:

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ServerResponse<Integer> addSomeClass(@RequestBody @Valid myclass mymy) {

I also set up

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

private @Value("${web.maxFileUploadSize}") int MAX_FILE_UPLOAD_SIZE;

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    registry.addResourceHandler("/deployed/**").addResourceLocations("/deployed/");
}

@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver ret = new CommonsMultipartResolver();
    ret.setMaxUploadSize(MAX_FILE_UPLOAD_SIZE);
    return ret;
}

@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter(){
    RequestMappingHandlerAdapter requestMappingHandlerAdapter = new RequestMappingHandlerAdapter();
    List<HttpMessageConverter<?>> messageConverters = new LinkedList<>();
    messageConverters.add(new MappingJackson2HttpMessageConverter());
    requestMappingHandlerAdapter.setMessageConverters(messageConverters);
    return requestMappingHandlerAdapter;
}

@Bean(name ="validator")
public LocalValidatorFactoryBean validator(){
    return new LocalValidatorFactoryBean();
}
}

when i send this json:

{"title":"","description":""}

nothing happens and everything continues.

I can not find the answer.

UPDATE

I already had:

<hibernate-validator-version>4.3.1.Final</hibernate-validator-version>

So, I updated it to: 5.1.1and this is what I get

 Caused by: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 74 more
Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:459)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:148)
... 82 more
Caused by: java.lang.ClassNotFoundException: javax.validation.ParameterNameProvider
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 92 more

so I updated my validation-apito 1.1.0.Finalwithout exception, but have not yet verified

+4
source share
6

BindingResult (myclass mymy),

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ServerResponse<Integer> addSomeClass(@RequestBody @Valid myclass mymy, BindingResult result) {

, , ...........

+3

Hibernate Validator POM.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>
+1

. spring ? spring mvc? , , JSR-303 Validator . spring .

, LocalValidatorFactoryBean, validaton.

@Configuration
public class ValidationConfiguration
{
    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean()
    {
        Locale.setDefault(Locale.ENGLISH);

        return new LocalValidatorFactoryBean();
    }
}
+1

, , , , . , . , , spring:

<properties>
<spring.version>4.0.5.RELEASE</spring.version>
</properties>



<dependencies>

    <!-- Spring  dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Hibernate Validator -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version>
    </dependency>

</dependencies>

=========== ==========

, . , , ( ), . , - @Aph1ka. :

@RequestMapping(value = "foo")
public class SomeController {
  @RequestMapping(method = RequestMethod.POST)
  @ResponseBody
  public ServerResponse<Integer> addSomeClass(@RequestBody @Valid myclass mymy) {
        ....
  }

  @ExceptionHandler
  @ResponseBody
  @ResponseStatus(value = HttpStatus.BAD_REQUEST)
  public Error handleException(MethodArgumentNotValidException exception) {
      return new ApiErrors(exception.getBindingResult());
  }

}

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ServerResponse<Integer> addSomeClass(@RequestBody @Valid myclass mymy, Errors errors) {
  if (errors.hasErrors()) {
     // return error some view e.g.
     return new ResponseEntity(new ApiErrors(errors), HttpStatus.BAD_REQUEST);
  }
  //....
}

, @Aph1ka :

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ServerResponse<Integer> addSomeClass(@RequestBody @Valid myclass mymy, BindingResult result) {
  if (result.hasErrors()) {
    // return some error view
  }
  // ....
}
0

. :

@InitBinder("multimediaParams")

, :

@InitBinder

, . :

Object handler = handlerMapping.getHandler(request).getHandler();
handlerAdapter.handle(request, response, handler);

:

ConfigurableWebBindingInitializer webBindingInitializer = new ConfigurableWebBindingInitializer();
webBindingInitializer.setValidator(multimediaValidator);
handlerAdapter.setWebBindingInitializer(webBindingInitializer);

Object handler = handlerMapping.getHandler(request).getHandler();
handlerAdapter.handle(request, response, handler);

, , . , .

0
  • @NotEmpty Hibernate, @NotNull, beans JSR-303.
  • BindingResult , @Aph1ka.
  • spring mvc .
    pom.xml
    validation
-1

Source: https://habr.com/ru/post/1547342/


All Articles