【问题标题】:REST API is unable to work in JSON formatREST API 无法以 JSON 格式工作
【发布时间】:2016-01-28 10:18:50
【问题描述】:

我是使用 Java 开发 REST API 的新手。我使用mkyong 教程做了一个非常简单的教程,它只说“你好”。我正在使用 Apache Tomcat。

现在我正在尝试开发一种返回 JSON 对象的方法。我在这里尝试这个例子 - http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/。部分代码已更改(例如:包名)。以下是我的代码。

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>

我的应用程序不是 marven 项目。所以添加的库如下。

我使用以下 URL 测试了应用程序。

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

我得到的只是下面的页面

知道为什么我没有得到预期的结果吗?

【问题讨论】:

  • 请发布日志或一些错误信息
  • 尝试调试,在Track track = new Track();处下断点。此外,您要返回一个 Track 对象,您需要返回一个 JSONObject。
  • 不确定错误原因,但您目前没有任何 JSON 支持。 See here
  • @peeskillet:请提供您的评论作为答案。它解决了这个问题:)

标签: java json rest tomcat jersey


【解决方案1】:

目前您没有任何 JSON/POJO 支持。 web.xml 中的jersey-json jar 和POJOMappingFeature 配置适用于Jersey 1.x,不适用于Jersey 2.x。对于 Jersey 2.x 支持所需的所有 jar,请参阅 this answer

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多