我试图理解在什么情况下(如果可能的话)会得到这种类型的例外:
找不到适用于DTO的媒体类型= application / 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一样使用了这个相同的场景,那么为什么这个不能用呢?
我的问题是,是否有特定的情况,泽西/杰克逊无法完成这项任务,而且必须手动完成,或者我错过了什么,只是失明了?
这是例外:
找不到媒体类型= application / json的MessageBodyWriter, type = class com.CLA,genericType = class com.CLA
它有时不起作用,有时它并不是,它只是不为这个资源方法工作,即使我有两个其他资源方法使用不同的DTO执行相同的操作
答案 0 :(得分:0)
发生错误时,您能提供更具体的情况吗?由于我只是看到您声明@Produces
注释但没有@Consumes
注释我认为发送请求时会发生此错误?如果是这种情况,只需将其添加到您想要的方法中,或者将其添加到类名称上方:
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
但如果不是这种情况,可能是因为您需要指定要在json中发送请求和接收响应,因此请在请求标头中添加:
Content-Type: application/json
Accept: application/json