【发布时间】:2017-04-21 00:34:27
【问题描述】:
我试图了解在什么情况下(如果可能)会出现这种类型的异常:
没有找到用于 DTO 的媒体类型 = 应用程序/json 的 MessageBodyWriter 使用@xmlrootelement
是的,我的 maven 依赖项是正确的,我什至有两个类似的 DTO,它们可以正常工作,让 Jersey 处理内容协商/编组...
由于某种原因,我得到了前面提到的异常:
资源方式:
@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@WebinarSecurityFilter
public Response getXYZ( @QueryParam("startDate") LocalDate start,
@QueryParam("endDate") LocalDate end,
@QueryParam("excludesubaccounts") String excludeSubAcc){
LocalDate now = LocalDate.now();
LocalDate startDate = start == null ? now.minusDays(30) : start;
LocalDate endDate = end == null ? now : end;
boolean excludeSubAccounts = excludeSubAcc != null && "Y".equalsIgnoreCase(excludeSubAcc);
List<ABC> resultQuery = abcService.getABCs(clientId, startDate, endDate, excludeSubAccounts);
CLA cla= new CLA();
cla.setId(clientId);
cla.setA(resultQuery);
cla.setB(resultQuery.size());
return Response.ok(cla).build();
}
DTO/DTOContainer:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CLA{
private long id;
private long a;
private long b;
@XmlElement(name = "abc")
private List<ABC> ABCs;
//setters & getters
}
DTO:
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ABC{
// a lot of fields
//setters & getters
}
我在其他 DTO 中使用过同样的场景,那么为什么 this 不起作用?
我的问题是,是否存在特定情况下 Jersey/Jackson 无法完成这项任务而必须手动完成,或者我是否遗漏了什么而只是失明?
这是一个例外:
找不到媒体类型=应用程序/json的MessageBodyWriter, type=class com.CLA, genericType=class com.CLA
不是它有时有效,有时无效,它只是不适用于 this 资源方法,即使我有另外两个资源方法做同样的事情,但使用不同的 DTO
【问题讨论】:
-
在这种“有时有效,有时无效”的情况下,我强烈建议您发布真实代码。并请发布您的依赖项。我什至不必测试,而且我已经可以告诉您,如果我测试了您发布的内容(带有我“在脑海中想象”的依赖项),它应该会起作用。请发布足够的真实信息,您已经测试过实际失败。并发布整个堆栈跟踪。
-
正如我在问题中提到的,同样的场景用于两个不同的 DTO,它们工作得很好。我的问题很明确。
-
我认为向 DTO 添加几个字段根本不会给你任何信息,我提供所有代码的唯一地方是资源方法。
-
我从来没有说过“有时有效,有时无效”,但让我重新表述我的问题,尽量让它更清楚。
-
好吧,我可以在没有测试的情况下告诉你,如果你使用你帖子中的代码,使用 jersey-media-json-jackson,它会起作用(而且我不会得到你的错误提到)。所以我的意思是,问题可能并不明显。您的帖子中不包含的内容。我的建议是开始一个具有最小依赖项的新项目。添加just重现问题所需的类(甚至被删除)。并使用所有这些信息更新您的帖子,从依赖项到类,以及您如何提出请求。
标签: java jax-rs jersey-2.0