当前位置: 首页 > 知识库问答 >
问题:

Spring Data REST如何返回hibernate-JPA验证&json中的服务器内部错误而不是堆栈跟踪

牟子真
2023-03-14

我希望获得json格式的JPA验证和服务器内部错误,而不是堆栈跟踪,

使用Spring JPA data REST

@RepositoryRestResource(path = "entity")
public interface MyEntityRepo extends CrudRepository<MyEntity, Long> {}

当post没有name,address属性时,我希望验证错误不为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

当前回报:

>

  • 所需返回

    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>
    
    <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);
        }
    }
    
  • 共有1个答案

    白刚洁
    2023-03-14

    谢谢Alan Hay给我的建议。

     类似资料:
    • 我们有一个REST服务器(资源授权),它基于spring-security spring web jersey的Oauth2,用于我们的REST资源。大部分工作都很顺利,但是当使用错误的凭证在用户名-密码流中点击/oauth/token时,我们得到的不仅仅是400(按照规范应该是正确的),而是作为JSON的整个stacktrace。我四处搜寻、调试、摸索,但还是找不到罪魁祸首。这可能是Spring

    • 在将数据插入表时遇到问题。其他表可以很好地处理有说服力的查询。 我的HTML表单的帖子工作得很好。我可以得到另一种回应 我的表格运行得很好。没问题 我的问题是,当我试图在“myTable”表中插入数据时,会出现内部服务器错误500,无法跟踪它是什么。即使是laravel debugbar也帮不了我 路线。php FormController。php 我的模型。php 在我的表“myTable”中,

    • 问题内容: 这从未发生过。通常它会显示错误,但是现在它只给我500个内部服务器错误。当然,在显示错误之前,它是不同的服务器。现在,我在新服务器上(我具有完整的root用户,因此,如果需要在php.ini中的某个位置进行配置,则可以。)或者也许与Apache兼容? 我一直在忍受它,只是将文件传输到我的其他服务器上并在其中运行以查找错误,但这变得太乏味了。有没有办法来解决这个问题? 问题答案: 检查,

    • 在尝试使用Twython进行简单的推特搜索时 我得到了这个错误: 这里可能有什么问题?

    • 问题内容: 这是我在laravel 5中测试的ajax(请参阅下文) 和触发链接 和我的路线 但是当我在google chrome中运行控制台时,它给了我错误,并且未返回预期的响应“在laravel 5中返回’成功!ajax’;” POST http://juliver.laravel.com/test 500(内部服务器错误) 我的代码有什么问题/问题?我缺少什么? 问题答案: 虽然这个问题存在

    • 我使用spring ide在本地机器嵌入式apache服务器上部署了spring boot web应用程序,并访问了一个带有错误令牌的url,在这种情况下,它会返回未经授权的访问错误401和托管异常处理抛出的特定错误消息,而如果我在独立但相同的apache服务器上部署相同的应用程序,它会给我500个内部服务器错误而不是401或任何其他服务器端错误。 我捕获的日志只有以下一行不同: 下面是我用来处理