【问题标题】:Sending json data from Ajax to Servlet in java? [duplicate]在java中将json数据从Ajax发送到Servlet? [复制]
【发布时间】:2017-12-30 01:59:41
【问题描述】:

我对我在代码中面临的这个奇怪的错误感到非常困惑。所以,我正在尝试将数据从我的 jQuery 脚本发送到带有 AJAX 的 servlet。现在,这是我注意到的奇怪部分,当我将 contentType 设置为application/json 时,我注意到服务器端的所有值都是空的,但是当我删除它时,我在我的 servlet 中得到了正确的数据。现在,我想知道为什么我会遇到这样的错误?

这是我的jsp -

<script type="text/javascript">

$(document).on("click", "#check", function() { // When HTML DOM "click" event is invoked on element with ID "somebutton", execute the following function...
      event.preventDefault();
      var apiname=$("#apiname").val();
      var apiendpoint=$("#apiendpoint").val();
      var apiversion=$("#apiversion").val();
      var source=$("#source").val();


     $.ajax({
            type: "POST",
            url: "HomeServlet",
            contentType: "application/json",
            dataType:'json',
            data:{"apiname":apiname,"apiendpoint":apiendpoint,"apiversion":apiversion,"source":source},
            success: function(status){
                console.log("Entered",status);
            },
            error:function(error){
                console.log("error",error);
            },

        });
});

</script>

Servlet 代码 -

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        Map<String, String> job = new LinkedHashMap<>();

        //doGet(request, response);
        JSONArray jArray = new JSONArray();

      //  response.setContentType("text/html");
        PrintWriter out= response.getWriter();
        String n = request.getParameter("apiname");
        String p = request.getParameter("apiendpoint");
        String e = request.getParameter("apiversion");
        String c = request.getParameter("source");
        String status ="091";
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("driver loaded");
            System.out.println("Driver is loaded");
            Connection con= (Connection) DriverManager.getConnection("jdbc:mysql://localhost/apiprovider","root","");
            System.out.println("Connection created");
            PreparedStatement ps= ((java.sql.Connection) con).prepareStatement("insert into apiinfo(apiname,apiendpoint,apiversion,accessibility) values (?,?,?,?)");
            ps.setString(1,n);
            ps.setString(2,p);
            ps.setString(3, e);
            ps.setString(4,c);
            ps.execute();
            out.close();
            status ="000";
            con.close();
            System.out.println("Inserted");
        }
        catch(Exception e1)
        {           
            System.out.println(e1);
        }
        job.put("status",status);
        jArray.put(job); 

        System.out.println(jArray.toString());
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");

        response.getWriter().write(jArray.toString());    

    }

【问题讨论】:

标签: java jquery json ajax servlets


【解决方案1】:

那是因为当你这样发送 ajax 请求时:

 $.ajax({
        type: "POST",
        url: "HomeServlet",
        contentType: "application/json",
        dataType:'json',
        data:{"apiname":apiname,"apiendpoint":apiendpoint,"apiversion":apiversion,"source":source},
        success: function(status){
            console.log("Entered",status);
        },
        error:function(error){
            console.log("error",error);
        }
    });

您将数据作为普通的 POST 参数(不是 Stringnyfied)发送,然后告诉您的 servlet 这是一个 JSON 字符串(不是!!!)

所以要真正让它工作,你必须对发送到 servlet 的数据进行 Stringnify 或删除 contentType: "application/json"'dataType:'json' 这样您就可以将数据视为普通的 POST 数据。

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2021-07-09
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2017-05-28
    • 2013-05-27
    • 2014-07-21
    相关资源
    最近更新 更多