我是 Restful Web 服务的新手。我是新使用 jersey 在 java 中创建 Restful web 服务。该 Web 服务正在从 mysql 数据库获取数据,并应以 xml 格式显示响应。 但我总是从 apache tomcat 7 收到响应错误 500。在控制台中,除了 println 方法显示传递给它的字符串之外,没有显示任何错误或异常。但是服务器给出 500 错误..请帮助我
用户数据.java
package com.userdb;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class userData {
public String name;
public int iduser;
public userData(){}
public userData(String name, int iduser) {
this.name = name;
this.iduser = iduser;
}
public String getName() {
return name;
}
public int getIduser() {
return iduser;
}
public void setName(String name) {
this.name = name;
}
public void setIduser(int iduser) {
this.iduser = iduser;
}
}
airtime.java
package com.userdb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/resttest")
public class airtime {
ResultSet rs=null;
String msg="hello";
Connection con=null;
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("/get_users")
public List<userData> get_users(){
List<userData> retUser=new ArrayList<>();
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");
System.out.println("DriveManager");
PreparedStatement ps=con.prepareStatement("SELECT * FROM users");
rs=ps.executeQuery();
System.out.println(rs);
while(rs.next()){
userData obj=new userData();
obj.setIduser(rs.getInt("iduser"));
obj.setName(rs.getString("name"));
retUser.add(obj);
System.out.println("userData obj added to list");
}
con.close();
} catch (Exception e){
e.printStackTrace();
}
return retUser;
}
}
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>userdb</display-name>
<servlet>
<servlet-name>Jersey WebService</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.userdb</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey WebService</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
最佳答案
解决方案 1:
调整 userData.java
的顶部,以在文件顶部包含以下行:
package com.userdb;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class userData
{...}
说明:您将注意到已添加 XmlAccessorType 注释和 XMLAccessType。在对象中使用 setter 时需要此配置。您会注意到,调整代码以不使用 setter(排除上述内容)也将允许您在浏览器中查看 RESTful 服务。
解决方案 2:
更快的替代方法是将公共(public)变量 name
和 iduser
设置为私有(private)。这也将避免映射到 xml 时发生冲突。
关于java - java和mysql中的restful webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36100260/