2016-10-11 1 views
0

私のdropwizardリソースで、私は組み込みのJackson JSONオブジェクトマッピングを使用してデータをバインドしています。Dropwizardリソースエラーの応答

public class WidgetServiceResource { 

    @POST 
    @Path("/widget") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response foo(ModelParameters c) { 
     return Response.ok(c.value).build(); 
    } 

私がしかし気づいた何を、私が悪いの体をPOSTする場合、JSONを解析しない、と私は私の会社の通信規格を満たしていない応答を添えています。回答をカスタマイズするにはどうすればよいですか?

は、例えば、あなたのYAMLでは、あなたが必要です:

server: 
    registerDefaultExceptionMappers: false 
    rootPath: /api/* 
    requestLog: 
    appenders: [] 
    applicationConnectors: 
    - type: http 
    port: 9085 
logging: 
    level: INFO 

注:registerDefaultExceptionMappers: falseが教えてくれます

答えて

1

は、あなたがしたい例外を処理するために、すべてのデフォルトの例外マッパーの登録を解除してから、独自に登録する必要がありますDWはExceptionMappersを登録しません。

これで、自分で実装することができます。私の場合、キャッチオールハンドラーを実行します:

public class MyExceptionMapper implements ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 
     return Response.status(400).entity("This makes no sense").build(); 
    } 

} 

これは例外に反応し、400とStringで応答します。

最後に、メインクラスに登録:

environment.jersey().register(MyExceptionMapper.class); 

そして証明のための試験:

[email protected]:~/dev/eclipse/eclipse_jee$ curl -v "http://localhost:9085/api/viewTest" 
* Trying 127.0.0.1... 
* Connected to localhost (127.0.0.1) port 9085 (#0) 
> GET /api/viewTest HTTP/1.1 
> Host: localhost:9085 
> User-Agent: curl/7.47.0 
> Accept: */* 
> 
< HTTP/1.1 400 Bad Request 
< Date: Wed, 12 Oct 2016 10:16:44 GMT 
< Content-Type: text/html 
< Content-Length: 19 
< 
* Connection #0 to host localhost left intact 
This makes no sense 

希望に役立ち、

- アルトゥルを

+0

OMGはあなたに感謝します。私はこれに着く必要がありますが、確かに近い将来このようなものを実装する必要があります。私は戻ってくる – MedicineMan