2010-09-09 14 views
3

Jersey identifie les demandes en examinant l'en-tête Accept. J'ai une requête qui n'accepte que du texte/* - Comment puis-je forcer la réponse à être par exemple application/json?JAX-RS Jersey - Comment forcer une réponse ContentType? Ecraser la négociation de contenu

@POST 
@Path("/create") 
@Produces(MediaType.APPLICATION_JSON) 
public MyResponseObject create() { 
    return new MyResponseObject(); 
} 

Si une demande est dirigée de créer qui accepte uniquement le texte/* Jersey renverra une 500. Y at-il un moyen de contourner ce problème? (Je ne peux pas changer les requêtes acceptent l'en-tête).

Répondre

5

Jersey soutient également cette via ResourceConfig PROPERTY_MEDIA_TYPE_MAPPINGS de propriété que vous pouvez configurer dans votre web.xml ou programatically via des API Jersey, comme indiqué ci-dessous:

DefaultResourceConfig rc = new DefaultResourceConfig(MyResource.class); 
rc.getMediaTypeMappings().put("json", MediaType.APPLICATION_JSON_TYPE); 
rc.getMediaTypeMappings().put("xml", MediaType.APPLICATION_XML_TYPE); 
SimpleServerFactory.create("http://localhost:9090", rc); 

Vous pouvez forcer la négociation de type de contenu en ajoutant un suffixe .json ou .xml à votre URL.