【问题标题】:Simple rest crud web service using JAX-RS, mysql, JSON, Jersey, Tomcat使用 JAX-RS、mysql、JSON、Jersey、Tomcat 的简单 rest crud web 服务
【发布时间】:2017-06-26 11:03:13
【问题描述】:

我正在尝试使用 Jersey、Tomcat 8.0、JAX-RS、mysql 和 JSON 创建一个支持 CRUD 操作的简单的 restful web 服务。我按照本指南 (https://codezone4.wordpress.com/2012/11/08/restful-web-services-java-mysql-and-json/) 操作,结果如下:

This is my project architecture

这是Party.java,查询数据库后想绑定数据时使用的类:

package dto;

public class Party {
private int id;
private String name;
private String organizer;
private String date;
private String place;

public Party(){

}

public Party(int id, String name, String organizer, String date, String place){
    super();
    this.id=id;
    this.name=name;
    this.organizer=organizer;
    this.date=date;
    this.place=place;
}

    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 getOrganizer()
    {
    return organizer;
    }

    public void setOrganizer(String organizer)
    {
    this.organizer = organizer;
    }

    public String getDate()
    {
    return date;
    }

    public void setDate(String date)
    {
    this.date = date;
    }

    public String getPlace()
    {
    return place;
    }

    public void setPlace(String place)
    {
    this.place = place;
    }

    @Override
    public String toString()
    {
    return "Party [id=" + id + ", name=" + name + ", organizer=" + organizer
    + ", date=" + date + "place=" + place + "]";
    }
}

这是 Database.java:

package dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class Database {
    public Connection getConnection() throws Exception {
        try {
            String connectionURL = 
        "jdbc:mysql://localhost:3306/myParty";
        Connection connection = null;
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(connectionURL, "root", "");
        return connection; 
        } catch (Exception e) {
            throw e;
        }
}
}

这是 Access.java:

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import dto.Party;

public class Access {
public ArrayList<Party> getParties(Connection con) throws SQLException {
    ArrayList<Party> partyList = new ArrayList<Party>();
    PreparedStatement stmt = con.prepareStatement("SELECT * FROM party");
    ResultSet rs = stmt.executeQuery();
    try {
        while(rs.next()) {
            Party partyObj = new Party();
            partyObj.setId(rs.getInt("id"));
            partyObj.setName(rs.getString("name"));
            partyObj.setOrganizer(rs.getString("organizer"));
            partyObj.setDate(rs.getString("date"));
            partyObj.setPlace(rs.getString("place"));
            partyList.add(partyObj);
        }
    } catch (SQLException e) {
        e.printStackTrace();
        }
    return partyList;
}
}

这是 AccessManager.java:

package model;

import java.sql.Connection;
import java.util.ArrayList;

import dao.Access;
import dao.Database;
import dto.Party;

public class AccessManager {
public ArrayList<Party> getParties() throws Exception {
    ArrayList<Party> partyList = new ArrayList<Party>();
    Database db = new Database();
    Connection con = db.getConnection();
    Access access = new Access();
    partyList = access.getParties(con);
    return partyList;
}
}

这是 PartyService.java:

package webService;

import java.util.ArrayList;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import com.google.gson.Gson;

import model.AccessManager;

import dto.Party;

@Path("/partyService")
public class PartyService {
@GET
@Path("/parties")
@Produces("application/json")
public String parties() {
    String parties = null;
    ArrayList<Party> partyList = new ArrayList<Party>();
    try {
        partyList = new AccessManager().getParties();
        Gson gson = new Gson();
        parties = gson.toJson(partyList);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return parties;
}
}

如您所见,目前只有 GET 操作。我在root用户下的mysql中手动创建了一个名为myParty的数据库,我在其中创建了一个名为party的表,并在该表中添加了一行数据。如果我输入“SELECT * FROM party”,它会正确返回该行。理论上 GET 操作应该返回该行。

这是 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" 
version="3.0">
  <display-name>myParty_0.1</display-name>
  <servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
 <!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>myParty_0.1</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

现在,理论上,如果我在 Tomcat 服务器中运行这个项目并转到 http://localhost:8081/myParty_0.1/rest/partyService/parties(8081 是我配置中的 Tomcat 服务器端口),它应该返回我在 mysql 表中添加的行,而是返回“HTTP 状态 404 - 未找到”、“说明:请求资源不可用”。我还尝试使用 Google Postman 执行 GET 请求:在 HTML 格式中,它给了我与浏览器相同的错误,在 JSON 格式中,它显示“意外'

【问题讨论】:

  • 你叫什么WAR? /localhost:8081//rest/partyService/parties 怎么样?
  • WAR 名称是指eclipse 中的项目名称?在这种情况下,它是 myParty_0.1 并且 url 是相同的

标签: java mysql web-services rest tomcat


【解决方案1】:

我自己找到了答案:错误出现在 web.xml 中,在 param-value 标记之间。这里必须有包含资源类的包(在我的情况下,该类是 PartyService.java,包含在 webService 包中),所以如果我像这样更改该行

<param-value>webService</param-value>

它有效。

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多