宁静的Web服务jax-rs发布方法不起作用 [英] restful webservices jax-rs post method not working

查看:78
本文介绍了宁静的Web服务jax-rs发布方法不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对静态Web服务是陌生的..当对"/adduser"发出发布请求时,例如请求数据为{"iduser":5,"name":"bob"},其余客户端给出500错误和蚀控制台提供MySqlSyntaxErrorException:字段列表"中的未知列"bob"

I am new to restful web services ..when a post request is made to "/adduser" ,like with request data as {"iduser":5,"name":"bob"} , the rest client gives 500 error and eclipse console gives MySqlSyntaxErrorException: Unknown column 'bob' in 'field list'

DbConnection.java

DbConnection.java

package com.dbproject;

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

public class DbConnection {

    public static Connection getConnection(){
        Connection con=null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con=DriverManager.getConnection("jdbc:mysql://localhost:3307/thedb","root","root");

        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
             e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return con;

    }


}

DbServices.java

DbServices.java

package com.dbproject;

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


public class DbServices {
    Connection       con=DbConnection.getConnection();


    public String addUser(int iduser,String name) throws SQLException{
        PreparedStatement ps=con.prepareStatement("insert into users values("+iduser+","+name+")");
        int res=ps.executeUpdate();
        con.close();
        if(res>0){
            System.out.println("Insert Query Successfull");
            return "Done";
        }
        else{
            System.out.println("Insert Query Failed");
            return "Error";
        }       
    }


}

Resources.java

Resources.java

package com.dbproject;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.google.gson.Gson;
import com.google.gson.JsonObject;


@Path("/user")
public class Resources {
    DbServices dbServices=new DbServices();

    @POST
    @Path("/adduser")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.TEXT_PLAIN)
    public String addUser(String s) throws SQLException{
        Gson gson=new Gson();
        UserModel userModel=gson.fromJson(s,UserModel.class);
        String str=dbServices.addUser(userModel.getIduser(),userModel.getName());
    return str;
    }

}

UserModel.java

UserModel.java

package com.dbproject;

import javax.xml.bind.annotation.XmlRootElement;

 @XmlRootElement
 public class UserModel {
    private int iduser;
    private String name;

    public int getIduser() {
        return iduser;
    }
    public String getName() {
        return name;
    }
    public void setIduser(int iduser) {
         this.iduser = iduser;
     }
    public void setName(String name) {
        this.name = name;
    }

}

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>dbproject</display-name>

<servlet>
<servlet-name>Jersey Web Services</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.dbproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Services</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>


</web-app>

推荐答案

MySqlSyntaxErrorException

表示您的SQL语法错误.

Means you have a syntax error on your SQL.

"insert into users values("+iduser+","+name+")"

字符串值需要用引号引起来. name值需要用引号引起来

String values require quotes. The name value needs to be wrapped in quotes

+",'"+name+"')"

数字不需要它们.

除此之外,您甚至都不使用 PreparedStatement 正确.您应该使用?语法,并使用PreparedStatment API替换它们.例如

Aside from this, you are not even use PreparedStatement correctly. You should be using ? syntax, and using the PreparedStatment API to replace them. e.g.

PreparedStatement ps=con.prepareStatement("insert into users values(?,?)");
ps.setInt(1, isuser);
ps.setString(2, name);
int result = ps.executeUpdate();

另请参见:

这篇关于宁静的Web服务jax-rs发布方法不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆