2017-04-21 1 views
0

J'essaie de comprendre dans quels scénarios (si possible) peut-on obtenir ce type d'exception:MessageBodyWriter pas trouvé pour le type de média = application/JSON pour DTO avec @XmlRootElement

MessageBodyWriter pas trouvé pour les médias type = application/JSON pour DTO avec @XmlRootElement

Oui, mes dépendances de Maven sont corrects et j'ai même deux DTO similaires qui fonctionnent très bien laisser Jersey gérer la négociation de contenu/...marshalling

Pour une raison quelconque, je reçois l'exception mentionnée avec la suivante:

méthode de ressource:

@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:

J'ai utilisé ce même scénario avec d'autres DTO, alors pourquoi cette ne fonctionne pas? Ma question est la suivante: existe-t-il des scénarios spécifiques où Jersey/Jackson ne peut pas accomplir cette tâche et où il faut le faire manuellement ou est-ce que je manque quelque chose et que je suis aveugle?

est ici l'exception:

MessageBodyWriter pas trouvé pour le type de support = application/JSON, le type = classe com.CLA, GenericType = classe com.CLA

ne est pas que parfois fonctionne, et parfois il ne le fait pas, il ne fonctionne pas fonctionne pour cette méthode de ressource même si j'ai deux autres méthodes de ressources qui font exactement la même chose, mais avec des DTO différents

+0

dans un scénario comme celui-ci où il « fonctionne parfois et ne parfois pas », je suggère fortement que vous postez _RÉELLE_ code. Et s'il vous plaît aussi poster vos dépendances. Je n'ai même pas besoin de tester, et je peux déjà dire que ce que vous avez posté (avec les dépendances que j'imagine dans ma tête) devrait fonctionner si je l'ai testé. S'il vous plaît poster assez d'informations _real_, que vous avez testé pour échouer réellement.Et poster la trace de la pile entière. –

+0

Comme je l'ai mentionné dans la question, ce même scénario est utilisé avec deux DTO différents et ils fonctionnent très bien. Ma question est très claire. –

+0

Je ne pense pas ajouter quelques champs à la DTO vous donnera des informations à tous et le seul endroit où j'ai donné tout le code était dans la méthode des ressources. –

Répondre

0

Pourriez-vous donner des situations plus spécifiques lorsque l'erreur se produit? Puisque je viens de voir que vous déclarez @Produces annotations, mais il n'y a pas d'annotations @Consumes Je pense que cette erreur se produit lorsque vous envoyez une demande? Si tel est le cas, il suffit d'ajouter ce soit sur votre méthode de désir ou tout simplement le mettre au-dessus du nom de la classe:

@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 

Mais si ce n'est pas le cas, est peut-être parce que vous devez spécifier que vous voulez envoyer demande et recevoir une réponse en JSON, il faut donc ajouter dans votre tête de requête:

Content-Type: application/json 
Accept: application/json 
+0

C'est la chose, c'est le seul endroit où c'est arrivé. et il n'a qu'un '@ Produces' parce que c'est un GET –

+0

Oh oui, les en-têtes sont définis comme vous les avez placés –

+0

Essayez de supprimer' @ XmlRootElement' à la classe ABC –