0

Je veux obtenir la validation JPA et erreur interne du serveur sur le format JSON et non trace de la pile,Comment les erreurs internes de validation hibernate-JPA données ressort de rappel REST et serveur dans JSON pas trace de la pile

En utilisant Spring JPA data rest

  • MyEntity dépôt

    @RepositoryRestResource(path = "entity") 
    public interface MyEntityRepo extends CrudRepository<MyEntity, Long> {} 
    
  • Lors de la publication sans propriété name, address je m'attends à une erreur de validation NOT NULL.

    curl -i -X POST -H "Content-Type: application/json" -d '{"name":"not passed and @NotNull","address":"not passed and @NotNull","city":"city","area":"area"}' http://localhost:8080/clinicfinder/api/entity 
    
  • retour actuel:

état HTTP 500 - traitement de la requête n'a pas; l'exception imbriquée est org.springframework.data.rest.core.RepositoryConstraintViolationException: la validation a échoué org.springframework.data.rest.core.event.ValidatingRepositoryEventListener.validate (ValidatingRepositoryEventListener.java:179) org.springframework.data.rest.core .event.ValidatingRepositoryEventListener.onBeforeCreate (ValidatingRepositoryEventListener.java:96) org.springframework.data.rest.core.event.AbstractRepositoryEventListener.onApplicationEvent (AbstractRepositoryEventListener.java:50) org.springframework.data.rest.core.event.AbstractRepositoryEventListener .onApplicationEvent (AbstractRepositoryEventListener.java:29) org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener (SimpleApplicationEventMulticaster.java:167) org.springframework.context.event.Si mpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster.java:139) org.springframework.context.support.AbstractApplicationContext.publishEvent (AbstractApplicationContext.java:383) org.springframework.context.support.AbstractApplicationContext.publishEvent (AbstractApplicationContext.java:337) org .springframework.data.rest.webmvc.RepositoryEntityController.createAndReturn (RepositoryEntityController.java:484) org.springframework.data.rest.webmvc.RepositoryEntityController.postCollectionResource (RepositoryEntityController.java:272) sun.reflect.NativeMethodAccessorImpl.invoke0 (natif méthode) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorI mpl.java:43) java.lang.reflect.Method.invoke (Method.java:483) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:205) org.springframework.web .method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:133) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:116) org.springframework.web.servlet.mvc .method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:827) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:738) org.springframework.web.servlet.mvc .method.AbstractHandlerMethodAdapter. handle (AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:963) org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:897) org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:872) javax .servlet.http.HttpServlet.service (HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service (HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52)

  • nécessaire Retour:

    response 404, {"errors":[{"entity":"MyEntity","message":"may not be null","invalidValue":"null","property":"name"},{"entity":"MyEntity","message":"may not be null","invalidValue":"null","property":"address"}]} 
    
  • Pom

    <properties> 
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
        <maven.compiler.source>1.6</maven.compiler.source> 
        <maven.compiler.target>1.6</maven.compiler.target> 
        <spring.data.jpa.version>1.11.1.RELEASE</spring.data.jpa.version> 
    <spring.data.rest.webmvc.version>2.6.1.RELEASE</spring.data.rest.webmvc.version> 
        </properties> 
    <dependencies> 
        <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.1.41</version> 
        <scope>runtime</scope> 
    </dependency> 
    <dependency> 
        <groupId>javax.servlet</groupId> 
        <artifactId>javax.servlet-api</artifactId> 
        <version>3.0.1</version> 
        <scope>provided</scope> 
    </dependency> 
    <!-- Spring Rest Repository --> 
    <dependency> 
        <groupId>org.springframework.data</groupId> 
        <artifactId>spring-data-jpa</artifactId> 
        <version>${spring.data.jpa.version}</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.springframework.data</groupId> 
        <artifactId>spring-data-rest-webmvc</artifactId> 
        <version>${spring.data.rest.webmvc.version}</version> 
    </dependency> 
    
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> 
    <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-core</artifactId> 
        <version>5.2.10.Final</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --> 
    <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-validator</artifactId> 
        <version>5.4.1.Final</version> 
    </dependency> 
    

  • web.xml

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>/WEB-INF/spring-config.xml</param-value> 
    </context-param> 
    <servlet> 
        <servlet-name>rest</servlet-name> 
        <servlet-class>org.springframework.data.rest.webmvc.RepositoryRestDispatcherServlet</servlet-class> 
        <init-param> 
         <param-name>throwExceptionIfNoHandlerFound</param-name> 
         <param-value>true</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>rest</servlet-name> 
        <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 
    
  • Selon cette Answer:

Ajouter cette ligne à Spring-config.xml

<context:annotation-config/> 
<bean class="path.to.config.RestValidationConfiguration" /> 

@Configuration 
public class RestValidationConfiguration extends RepositoryRestConfigurerAdapter { 

    @Bean 
    @Primary 
    /** 
    * Create a validator to use in bean validation - primary to be able to 
    * Autowire without qualifier 
    */ 
    Validator validator() { 
     return new LocalValidatorFactoryBean(); 
    } 

    @Override 
    public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) { 
     Validator validator = validator(); 
     // bean validation always before save and create 
     validatingListener.addValidator("beforeCreate", validator); 
     validatingListener.addValidator("beforeSave", validator); 
    } 
} 

Mais serveur garder le retour Stack trace pas de format d'erreur JSON.

Toute aide sera appréciée, merci.

+0

Votre classe 'RestValidationConfiguration' est-elle gérée par Spring? –

+0

Selon la documentation [Combinaison de configuration Java et XML] (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-java-combining) ' 'ajouté à' spring-config.xml' –

Répondre

0

Merci @Alan Hay, pour suggérer ce Answer qui travaille avec moi.