2016-04-03 1 views
3

Je travaille sur la passerelle api, avec botte et jersey (j'ai utilisé spring-boot-starter-jersey). Je suppose que de revenir XML et JSON réponse, il semble fonctionner avec une réponse JSON mais quand la demande est faite pour xml je reçois 404. voici le code pour le serviceSpring Boot avec Jersey retour réponse xml

package com.quickp.services; 

import javax.ws.rs.DefaultValue; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.QueryParam; 

import org.springframework.http.MediaType; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.quickp.unit; 
import com.quickp.models.units; 
import com.quickp.serviceclient.ApiClient; 

@Path("api/units") 
public class UnitsService{ 

    private ApiClient client; 

    public UnitsService(ApiClient client){ 
     this.client = client; 
    } 

    @GET 
    @Produces({MediaType.APPLICATION_XML_VALUE,  MediaType.APPLICATION_JSON_VALUE}) 
    public @ResponseBody Units getUnits(
      @QueryParam("search") final String search, 
      @QueryParam("page") @DefaultValue("1") final int page) { 
     return client.getUnits(search, page, 10); 

    } 

} 

pom.xml a ce qui suit:

<dependency> 
    <groupId>com.fasterxml.jackson.dataformat</groupId> 
    <artifactId>jackson-dataformat-xml</artifactId> 
    <version>2.5.0</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-xml-provider</artifactId> 
    <version>2.5.0</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.woodstox</groupId> 
    <artifactId>woodstox-core-asl</artifactId> 
    <version>4.4.1</version> 
</dependency> 

et Units.class est quelque chose comme:

@Data 
@JacksonXmlRootElement(localName = "units") 
public class Units { 
    private int found; 
    private int display; 
    private boolean hasMore; 
    @JsonProperty("unit") 
    @JacksonXmlElementWrapper(useWrapping = false) 
    List<Unit> list; 
} 

et unit.class est quelque chose comme:

@Data 
@EqualsAndHashCode 
@JacksonXmlRootElement(localName = "unit") 
public class Unit { 
    private int id; 
    private String name; 
    private String unitType; 
    private String unitApp; 
    private String unitHomeApp; 
} 

(J'utilise lambok donc je n'ai pas besoin d'ajouter des getters et setters manuellement).

Merci pour toute l'aide que je suis coincé avec cela.

Cordialement Sajid

Répondre

2

Le fournisseur XML par défaut utilise JAXB, qui attend des annotations JAXB sur votre POJO. Si vous voulez utiliser le fournisseur Jackson XML, vous devez toujours l'enregistrer, ce qui remplacera celui de JAXB.

public class JerseyConfig extends ResourceConfig { 
    public JerseyConfig() { 
     register(JacksonXMLProvider.class); 
     // use JacksonJaxbXMLProvider if you also want JAXB annotation support 
    } 
} 

La raison de la 404, au lieu des 500 prévu est lié à this question. This answer devrait résoudre le problème, de sorte que vous obtenez les réponses d'erreur attendues.