java - REST API 无法以 JSON 格式工作

标签 java json rest tomcat jersey

我是使用 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 项目。所以添加的库如下。

enter image description here

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

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

我得到的只是下面的页面

enter image description here

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

最佳答案

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

关于java - REST API 无法以 JSON 格式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35058636/

相关文章:

java - 如果没有 Maven 构建,则无法更改代码

javascript - 如何使用 Turn.js 阻止 .json 请求?

authentication - 适用于 Web 应用程序和移动应用程序的 REST API 身份验证

c# - 继承 Newtonsoft JSON.NET 的反序列化无法正常工作

javascript - 如何重新加载蜡烛图中的数据? AmChart 库

javascript - URL 中的参数总是字符串吗?

java - 无法解析构造函数 ArrayAdapter(android.Content.Context, int, java.util.ArrayList<MyObject>)

java - 如何用特殊字符 `"`初始化字符串?

java - 根据 TLD 获取标签 [form] 的属性 [modelAttribute] 无效

javascript - 使用React-Hooks/Axios获取数据并显示在表格中