2012-05-09 5 views
3

私はJBoss-7.1とRESTEasyを使って簡単なRESTFulサービスを開発しています。RESTEasy Bean検証エラーをキャッチするには?

@Path(value="/customers") 
@ValidateRequest 
class CustomerService 
{ 
    @Path(value="/{id}") 
    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public Customer getCustomer(@PathParam("id") @Min(value=1) Integer id) 
    { 
    Customer customer = null; 
    try { 
     customer = dao.getCustomer(id); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return customer; 
    } 
} 

をここに私は制約が失敗すると、画面上のスタックトレースを示すだろう@Minその後、URL http://localhost:8080/SomeApp/customers/-1を打ったとき、次のよう は、私が呼ばれたCustomerService RESTサービスを、持っています。

これらの検証エラーをキャッチして、適切なエラーメッセージを表示してユーザーに表示するXML応答を作成する方法はありますか?

答えて

9

例外マッパーを使用する必要があります。例:

@Provider 
public class ValidationExceptionMapper implements ExceptionMapper<javax.validation.ConstraintViolationException> { 

    public Response toResponse(javax.validation.ConstraintViolationException cex) { 
     Error error = new Error(); 
     error.setMessage("Whatever message you want to send to user. " + cex); 
     return Response.entity(error).status(400).build(); //400 - bad request seems to be good choice 
    } 
} 

エラーのようなものかもしれない。ここで

@XmlRootElement 
public class Error{ 
    private String message; 
    //getter and setter for message field 
} 

次にあなたがXMLにラップエラーメッセージが表示されます。

+1

これは私が探しているものです。どうもありがとう。 –

+0

hi siva、どのようにして、Set >を返すcex.getConstraintViolations()から意味のあるエラーオブジェクトを変換しましたか、ここでTジェネリックタイプをどのように識別しますか? –

+1

これは、Wildfly 8.2.0(HV 5.1.3、RestEasy 3.0.10)では動作しません。ExceptionMapperは完全に無視されています(例外マッパーは呼び出されません。応答内のエンティティはI ' m設定では、不一致のためにProcessingExceptionが発生しています)。他の例外マッパーは完璧に動作します。何が原因だと思いますか? – jpangamarca

関連する問題