当前位置: 首页 > 知识库问答 >
问题:

带Jersey返回xml响应的Spring Boot

颛孙英才
2023-03-14

我正在使用spring boot和jersey(我使用过spring-boot-starter-jersey)开发网关api。我应该同时返回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);

    }

}
<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>
@Data
@JacksonXmlRootElement(localName = "units")
public class Units {
    private int found;
    private int display;
    private boolean hasMore;
    @JsonProperty("unit")
    @JacksonXmlElementWrapper(useWrapping = false)
    List<Unit> list;
}
@Data
@EqualsAndHashCode
@JacksonXmlRootElement(localName = "unit")
public class Unit {
    private int id;
    private String name;
    private String unitType;
    private String unitApp;
    private String unitHomeApp;
}

谢谢你帮了我很多忙。

向sajid致意

共有1个答案

鲜于意
2023-03-14

默认的XML提供程序使用JAXB,它期望POJO上有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与这个问题有关。这个答案应该可以解决问题,因此您会得到预期的错误响应。

 类似资料:
  • 使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png

  • 我对使用泽西2.29有问题。这是一个简单的例子。我设法返回纯文本,但如果我尝试返回XML,我会得到500个错误。 我的步骤: AlienResource.java

  • 因为它创建了一个新的资源,所以如果它返回状态代码201是合适的,但目前它返回200。 我发现如何设置状态代码的唯一方法是让方法返回一个并在那里设置它,但我确实不希望我的所有接口返回一个泛型响应,而不是实际的响应对象(在本例中是)。

  • 我试图编写一个方法,它接受@PathVariable参数,并将用户重定向到一个jsp文件。 @pathvariable(value=“customerId”)字符串customerId @pathvariable(name=“customerId”)字符串customerId @pathvariable(“customerId”)字符串customerId 谢谢你的帮助。

  • 我对Spring很陌生。我有一个在Spring中编写的REST api,但我不知道如何使用自定义http响应代码返回JSON响应。 我返回一个JSON响应,如下所示: 但它总是显示200个http ok状态代码。 如何可能在void函数中返回JSON响应和自定义HTTP代码?

  • 本文向大家介绍symfony2 返回404响应,包括了symfony2 返回404响应的使用技巧和注意事项,需要的朋友参考一下 示例 当在服务器上找不到资源时,将返回404响应。在Symfony中,可以通过引发NotFoundHttpException异常来创建此状态。为了避免use在控制器内部添加多余的语句,请使用类createNotFoundException()提供的Controller