在我的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没有解析,而且我的回复不符合我公司的通信标准。如何自定义响应?
答案 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