简体   繁体   English

xml响应不起作用,但是json在使用Jersey的Rest Api运行

[英]xml response not working but json is working Rest Api using Jersey

This is my first program on REST API using jersey. 这是我第一个使用jersey的REST API程序。 My rest API is giving me an Error code 500 when I try to get the response back in XML but it is working fine for JSON. 当我尝试以XML格式返回响应时,我的rest API给我一个Error code 500 ,但它对于JSON正常工作。

Can someone tell me what I am doing wrong? 有人可以告诉我我在做什么错吗?

There is no error shown in the console. 控制台中没有显示错误。

    public class MyResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("/cust")
    public Customer getCust() {
        Customer cus= new Customer();
        cus.setName("john");
        cus.setId(1);
        cus.setAddress("india");
        return cus;
    }
    @GET
    @Path("/test/order")
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public Order getOrder() {
        List<Order> o =new ArrayList<Order>();
        Order ord=new Order();
        ord.setCost(0);
        ord.setProductID(0);
        ord.setQuantity(0);
        ord.setShippingAddress("abcd");
        o.add(ord);

        return ord;
    }


}

My customer class 我的客户类别

    package in.octalian.mobileservice.model;

     import javax.xml.bind.annotation.XmlRootElement;

         @XmlRootElement
     public class Customer {

    private int id;
    private String name ;
    private String address;

    public Customer() {}

    public Customer(int id,String name,String address) {
        this.id=id;
        this.name=name;
        this.address=address;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

}

my pom.xml 我的pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>in.octalian</groupId>
    <artifactId>mobileservice</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>mobileservice</name>

    <build>
        <finalName>mobileservice</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
        </dependency>
        <!-- uncomment this to get JSON support -->
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-binding</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

    </dependencies>
    <properties>
        <jersey.version>2.27</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

XML response that I attach to give more information to you. 我附上的XML响应可为您提供更多信息。 在此处输入图片说明

The issue is that you are trying to access a URI /cus but your code have a declaration as @Path("/cust") . 问题是您尝试访问URI /cus但是代码的声明为@Path("/cust") So you should be using /cust . 因此,您应该使用/cust

Secondly, you could run your server(apache-tomcat for me) in debug mode to get debugging information if no logs are getting logged in the console for some error 其次,如果在控制台中由于某些错误而没有日志记录,则可以在调试模式下运行服务器(对我来说是apache-tomcat)以获取调试信息。

Also, you need to add the header "Accept" in the request with the expected result format type. 另外,您需要在请求中添加具有预期结果格式类型的标头“ Accept”。 If not specified the first one will be considered as it appears first. 如果未指定,则将第一个显示为第一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM