2016-01-28 47 views
0

我是使用Java開發REST API的新手。我使用mkyong教程做了一個非常簡單的教程,它只說「你好」。我正在使用Apache Tomcat。REST API無法以JSON格式工作

現在我正在嘗試開發一個將返回JSON對象的對象。我正在嘗試這裏的例子 - http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/。一些代碼被改變(例如:包名稱).Below是我的代碼。

Track.java

package com.tutorialspoint; 

/** 
* 
* @author Yohan 
*/ 
public class Track { 

    String title; 
    String singer; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getSinger() { 
     return singer; 
    } 

    public void setSinger(String singer) { 
     this.singer = singer; 
    } 

    @Override 
    public String toString() { 
     return "Track [title=" + title + ", singer=" + singer + "]"; 
    } 

} 

JsonService.java

package com.tutorialspoint; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

/** 
* 
* @author Yohan 
*/ 
@Path("/json/metallica") 
public class JsonService { 

    @GET 
    @Path("/get") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Track getTrackInJSON() { 

     Track track = new Track(); 
     track.setTitle("Enter Sandman"); 
     track.setSinger("Metallica"); 

     return track; 

    } 

    @POST 
    @Path("/post") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response createTrackInJSON(Track track) { 

     String result = "Track saved : " + track; 
     return Response.status(201).entity(result).build(); 

    } 

} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<display-name>Restful Web Application</display-name> 
    <servlet> 
     <servlet-name>NewServlet</servlet-name> 
     <servlet-class>NewServlet</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>Jersey RESTful Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.tutorialspoint</param-value> 
     </init-param> 
     <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
     </servlet> 
    <servlet-mapping> 
     <servlet-name>NewServlet</servlet-name> 
     <url-pattern>/NewServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Jersey RESTful Application</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 

我的應用程序是不是 a marven項目。所以添加的庫在下面。

enter image description here

我測試了以下網址的應用。

http://localhost:8080/RESTFUL_API_SAMPLE/rest/json/metallica/get

我得到的是下面的頁面

enter image description here

爲什麼我沒有得到預期的結果,任何想法?

+0

請發佈日誌或者一些錯誤消息 –

+0

嘗試調試,在'Track track = new Track();'放置一個斷點。此外,您正在重新調用「Track」對象,您需要返回一個JSONObject。 – kunpapa

+0

不確定錯誤的原因,但您目前沒有任何JSON支持。 [見這裏](http://stackoverflow.com/a/30424031/2587435) –

回答

1

目前您還沒有任何JSON/POJO支持。您的web.xml中的jersey-json jar和POJOMappingFeature配置適用於Jersey 1.x,這對Jersey 2.x不起作用。對於Jersey 2.x支持所需的所有罐子,請參閱this answer