Dropwizard资源错误响应

时间:2016-10-11 23:48:16

标签: java json jackson dropwizard

在我的dropwizard资源中,我使用内置的Jackson JSON对象映射来绑定我的数据。

public class WidgetServiceResource {

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

然而,我注意到,当我发布一个坏主体时,JSON没有解析,而且我的回复不符合我公司的通信标准。如何自定义响应?

1 个答案:

答案 0 :(得分:2)

您需要取消注册所有默认的异常映射器,然后注册您自己的异常映射器以处理您想要的异常:

例如,在您的yaml中,您需要:

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

注意:registerDefaultExceptionMappers: false将告诉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);

进行证明测试:

artur@pandaadb:~/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

希望有所帮助,

- Artur