2016-09-19 3 views
1

JAX-RSサービスでBean検証を使用しようとしています。しかし、私は単純なパラメータの代わりにJSONオブジェクトを使ってバリデーションを行うことはできません。JAX-RSとDTOパラメータを使用したBean検証

私はこのRESTインターフェースがあります。

@Path("persons") 
@Produces(MediaType.APPLICATION_JSON) 
public class PersonRestService { 

    @EJB 
    private GreeterEJBLocal greeterEJB; 

    @POST 
    @Path("greet") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public SayHelloRestResponse sayHello(SayHelloRestRequest sayHelloRestRequest) { 
     SayHelloRestResponse sayHelloRestResponse = new SayHelloRestResponse(); 
     Person person = new Person(); 
     person.setName(sayHelloRestRequest.person.name); 
     person.setEmail(sayHelloRestRequest.person.email); 

     SayHelloRequest sayHelloRequest = new SayHelloRequest(); 
     sayHelloRequest.setPerson(person); 

     SayHelloResponse sayHelloResponse = greeterEJB.sayHello(sayHelloRestRequest.person.name, sayHelloRestRequest.person.email); 

     sayHelloRestResponse.setMessage(sayHelloResponse.getMessage()); 

     return sayHelloRestResponse; 
    } 
} 

をそして、これはビーン検証アノテーションを持つ私のDTOです:

public class SayHelloRestRequest implements Serializable { 

    // Default serial version UID 
    private static final long serialVersionUID = 1L; 

    public Person person; 

    public static class Person { 
     @Size(min = 2, max = 5, message = "{person.name.size}") 
     public String name; 
     @Email(message = "{person.email.email}") 
     public String email; 
    } 

} 

私は検証のために失敗することはありませんサービスをテストしていた場合。私は間違っているのか分かりません。スクリーンショットがあり、私はあなたのメソッドのシグネチャに@Validを追加する必要があるサービスに

enter image description here

答えて

1

をテストしていた。

SayHelloRestResponse sayHello(@Valid SayHelloRestRequest sayHelloRestRequest) {

@Valid注釈があなたのDTOは、実行時に検証されることを保証します。来ている@ValidateRequest

あなたはRESTEasyのを使用している場合、あなたはあなたのメソッド(またはクラス)を注釈する必要があるだろうが:実際にちょうど私のSayHelloRestRequestに@Valid注釈を追加して、私の問題を解決

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-hibernatevalidator-provider</artifactId> 
    <version>2.3.1.GA</version> 
</dependency> 
+0

感謝そして人間のDTO。しかし、JSON形式でエラーメッセージを受け取る方法がありますか?私はそれをテキストプレーンにしています。 –

+1

@ProviderとExceptionMapperを追加する必要があります。この章を読むことができます。https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/content/en/ part1/chapter7/exception_handling.html –