使用JAX-RS,mysql,JSON,Jersey,Tomcat的简单的rest rest crud服务

问题描述:

我想创建一个支持使用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/)和我的结果如下:使用JAX-RS,mysql,JSON,Jersey,Tomcat的简单的rest rest crud服务

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用户下手动创建了一个名为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 - 未找到”,“description:请求资源不可用” 。我也试着用Google Postman做一个GET请求:在HTML格式中,它给了我同样的浏览器错误,它以JSON格式表示“意外的'<''。 Tomcat服务器正在运行,问题不在于Tomcat。我认为错误发生在web.xml或PartyService.java中,或者在mysql配置中考虑到它显示“找不到资源”。我已经多次阅读我的代码,但是我还没有发现问题,有人可以帮我吗?

+0

你的WAR的名字是什么?/localhost:8081//rest/partyService/parties? – StanislavL

+0

有了WAR名字,你的意思是eclipse中的项目名称?在这种情况下,它是myParty_0.1,url是一样的 –

我自己找到了答案:错误发生在web.xml中,参数值标签之间。这里必须有一个包含资源类(在我的情况下,类是PartyService.java,这是包含在web服务封装)封装,所以如果我改变该行这样

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

它的工作原理。