java - java和mysql中的restful webservice

标签 java jersey

我是 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)变量 nameiduser 设置为私有(private)。这也将避免映射到 xml 时发生冲突。

关于java - java和mysql中的restful webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36100260/

相关文章:

java - 默认 Jersey 查询参数

java - 如何安全地代理来自任何 url 的图像并避免漏洞利用?

java - Sql关键字用法作为jpa实体列名

java - AWS RDS 到 AWS ES

java - 如何在 jersey 2.15 中启用 HK2 TopicDistributionService?

java - 在添加自定义注释和 MethodInterceptor 时,EnhancerByGuice 生成的类导致 Dropwizard 出错

java - 球队和球员反对 Java 困难

java - 如何在 android 上以编程方式设置通话音量?

java - SwitchPreference onChecked/onClick 监听器

java - Jersey Rest API立即返回,长任务继续