2016-01-28 44 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