如何将JSON数据作为参数获取到Servlet中

时间:2017-08-24 08:18:42

标签: json servlets

我正在尝试编写我的第一个JSON servlet,如下所示:

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;
import org.json.JSONException;

public class Home extends HttpServlet{  

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{      
        res.setContentType("text/html; charset=UTF-8");
        req.setCharacterEncoding("UTF-8");
        res.setCharacterEncoding("UTF-8");      
        StringWriter sWriter    = new StringWriter();  
        PrintWriter out         = new PrintWriter(sWriter);                     

        String jsonText         = "{\"Name\":\"Vahid\",\"Nickname\":null,\"Salary\":\"15000.0\",\"isPermanent\":true,\"EmployeeId\":\"121\"}";      
        try{
            JSONObject json = new JSONObject(jsonText);       
            String name = json.getString("Name");
            out.println(json.toString()+"<br>"+"Name = "+name);
        }catch(JSONException e){
            e.printStackTrace();
        }

        res.getWriter().print(sWriter.toString());
        out.flush();
        out.close();
    }//doGet        
}//class

此代码工作正常并给我输出结果:

{"Name":"Vahid","Nickname":null,"Salary":"15000.0","EmployeeId":"121","isPermanent":true}
Name = Vahid

我的问题是如何从客户端浏览器中获取我的servlet中的JSON对象(作为POST请求),例如: request.getParameter("?????"); // JSON对象的参数名称是什么?或者我必须逐个获取JSON对象的所有元素作为request.getParameter(“name”);

更新
这是我的html文件:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script>
var form = $('#form1');
$(document).ready(function(){
     $('body').hide().fadeIn(5000);
$(".submit").click(function (e) {

$.ajax({
type: form.attr('method'),
url: form.attr('action'),
console.log(url);
data: $(form).serialize(),
         success: function(msg){

             var json = msg ;
             $('#json').val(json);   
                            }
        });

                                 });
                             });
</script>


<body><br>
<form name="input" action="/JSONServlet"  method="POST" id="form1"  enctype="text/plain">
First name: <input type="text" name="FirstName" id="Firstname" value=" "><br>
Last name: <input type="text" name="LastName" value=" "><br>
<br>
<input type="submit" value="Submit" class="submit">

</form>
</body>

当我写String name = request.getParameter("name");时,输出为null

在这里尝试的是:

String name = request.getParameter("FirstName");
    System.out.println(name);
        PrintWriter out= response.getWriter();
        try{
            JSONObject json = new JSONObject(name);         
            out.println(json.get("name"));          
        }catch(JSONException e){
            e.printStackTrace();
        }

输出为null

2 个答案:

答案 0 :(得分:2)

这取决于您使用哪种技术发送POST请求。以下是发送json数据的JavaScript示例:

var data = {
  name : "Vahid"
};
var request = new XMLHttpRequest();
request.open("POST", <URL>, true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');

request.send(JSON.stringify(data));

<强>更新

发送数据后,您可以使用服务器端的request.getParameter()来检索数据,例如:

String data = request.getParameter("param_name");

这将为您String提供json的代表。然后,您可以将其转换为JSONObject,就像您在相关示例中所做的那样。

答案 1 :(得分:0)

  

或者我必须逐个获取JSON对象的所有元素   的request.getParameter(&#34;名称&#34);

是的,如果将json对象传递给Servlet,则可以像通常那样获取各个字段名称。 一个接一个。

  

当我写String name = request.getParameter(&#34; name&#34;);然后输出   为空

这是因为您收到了错误的参数

看看你的表格:

First name: <input type="text" name="FirstName" id="Firstname" value=" "><br>
Last name: <input type="text" name="LastName" value=" "><br>

要获取名字字段,您必须拨打&#39; FirstName &#39; (名称属性)。

这样做:

String name = request.getParameter("FirstName");

您也不需要

value=" "

id="FirstName"

只是做:

<form name="input" action="/JSONServlet"  method="POST" id="form1">
First name: <input type="text" name="FirstName"/><br>
Last name: <input type="text" name="LastName"/><br>
<br>
<input type="submit" value="Submit" class="submit">
</form>

也从表单标记中删除它:

<强> enctype="text/plain"