12

spring-data-rest の検証を機能させようとしています。ドキュメントから、バリデーターを利用可能にするだけで済み、それを機能させることができましたが、検証制約が正常にキャッチ/処理されると、スタック トレースを含む 500 エラー ページが表示されます。

config クラス、RepositoryRestMvcConfiguration には、検証エラーが 500 ではなく 400 として返されるように見える validationExceptionHandler があります。これは、遅延ロードされた Bean でもあります。

設定が間違っていませんか? または、spring-data-rest が 500 ではなく 400 を返すようにする別の方法はありますか?

spring-data-rest バージョン 2.0.0 リリースを使用しています

tomcat が返すスタック トレース:

HTTP Status 500 - Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 10', propertyPath=login, rootBeanClass=class test.domain.Account, messageTemplate='{javax.validation.constraints.Size.message}'}
]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

アカウント エンティティ:

@Entity
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(unique = true)
    @Size(max = 10)
    String login;

}

RestMvcConfig:

@Configuration
public class RestExporterRestConfig extends RepositoryRestMvcConfiguration {}
4

2 に答える 2

4

以前の回答は私にとってはうまくいきませんでした。Spring Data Rest の変更が原因だと思うので、JPA と MongoDb で機能し、これに何年も費やしている他の人を救う更新された回答を次に示します。

これを私のbuild.gradle依存関係に追加する必要がありました

    compile('org.hibernate:hibernate-validator:4.2.0.Final')

そしてこの設定クラス

@Configuration
public class CustomRepositoryRestConfigurerAdapter extends RepositoryRestConfigurerAdapter {


   @Bean
   public Validator validator() {
       return new LocalValidatorFactoryBean();
   }

   @Override
   public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
       validatingListener.addValidator("afterCreate", validator());
       validatingListener.addValidator("beforeCreate", validator());
       validatingListener.addValidator("afterSave", validator());
       validatingListener.addValidator("beforeSave", validator());
   }
}
于 2016-04-23T17:57:20.560 に答える