我正在使用jersey 2.0创建REST服务。我正在扩展WebApplicationException
提出特定异常的方法
if(json.equals("") || json.equals(" ")) {
throw new ArgumentException("bad post data");
}
public class ArgumentException extends RestException {
.....
public ArgumentException(String message) {
super(Status.BAD_REQUEST,message);
}
}
public class RestException extends WebApplicationException {
...........
public RestException(Status status, String message) {
super(Response.status(status)
.entity(message)
.type("text/plain")
.build());
/*
super(Response.status(status)
.entity(new ErrorBean(status.getStatusCode(),message))
.type(MediaType.APPLICATION_JSON)
.build()); */
}
ErrorBean is a POJO
在RestException内部以纯字符串形式返回错误的方法(右http代码400和消息)。但是,当我尝试传递ErrorBean POJO并在响应中使用MediaType.APPLICATION_JSON时,我收到一条错误,上面写着“标题已被发送”,其中包含http错误代码500(因此管道存在一些内部问题)和空响应。
我也看过这个问题Returning JSON or XML for Exceptions in Jersey
如何将代码和消息作为JSON返回异常,如
{“code”:400,“message”:....}
更新
我已收到SO以及球衣用户邮件列表的答案。步骤
ResourceConfig rc = new ResourceConfig()。packages(“test”)。register(JacksonFeature.class);
答案 0 :(得分:2)
您需要在Application / ResourceConfig中注册JacksonFeature,即:
// Create JAX-RS application.
final Application application = new ResourceConfig()
.packages("org.glassfish.jersey.examples.jackson")
.register(JacksonFeature.class)
// No need to register this provider if no special configuration is required.
.register(MyObjectMapperProvider.class);
在泽西岛和documentation查看杰克逊支持的example。