Spring Boot with Jersey返回xml响应

时间:2016-04-03 17:48:23

标签: xml spring-boot jersey

我正在使用网关api,有弹簧靴和平针织物(我使用过spring-boot-starter-jersey)。我想要返回xml和json响应,它似乎与json响应一起使用但是当我为xml发出请求时,我得到404.这里是服务的代码

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包含以下内容:

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

和Units.class类似于:

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

和unit.class类似:

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

(我正在使用lambok,所以我不需要手动添加getter和setter。)

感谢所有帮助,我坚持这一点。

此致 sajid

1 个答案:

答案 0 :(得分:2)

默认的XML提供程序使用JAXB,它需要POJOS上的JAXB注释。如果你想使用Jackson XML提供程序,那么你仍然需要注册它,它将覆盖JAXB提供者。

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

404而不是预期的500的原因与this question有关。 This answer应解决问题,以便获得预期的错误响应。