我在网络上搜索了此主题,但找不到有效的示例。我会很高兴有人可以给我帮助。
这是我测试的。
$.ajax({ url: 'GetJson', type: 'POST', dataType: 'json', contentType: 'application/json', data: {id: 'idTest'}, success: function(data) { console.log(data); } });
在塞夫莱特
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); String id2[] = request.getParameterValues("id"); String id3 = request.getHeader("id"); }
我在所有事情上都变得空虚。
排序答案是此数据隐藏在请求中InputStream。
InputStream
以下servlet是一个演示如何使用它的示例(我正在JBoss 7.1.1上运行它):
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name="fooServlet", urlPatterns="/foo") public class FooServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream is = req.getInputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buf = new byte[32]; int r=0; while( r >= 0 ) { r = is.read(buf); if( r >= 0 ) os.write(buf, 0, r); } String s = new String(os.toByteArray(), "UTF-8"); String decoded = URLDecoder.decode(s, "UTF-8"); System.err.println(">>>>>>>>>>>>> DECODED: " + decoded); System.err.println("================================"); Enumeration<String> e = req.getParameterNames(); while( e.hasMoreElements() ) { String ss = (String) e.nextElement(); System.err.println(" >>>>>>>>> " + ss); } System.err.println("================================"); Map<String,String> map = makeQueryMap(s); System.err.println(map); ////////////////////////////////////////////////////////////////// //// HERE YOU CAN DO map.get("id") AND THE SENT VALUE WILL BE //// //// RETURNED AS EXPECTED WITH request.getParameter("id") //// ////////////////////////////////////////////////////////////////// System.err.println("================================"); resp.setContentType("application/json; charset=UTF-8"); resp.getWriter().println("{'result':true}"); } // Based on code from: http://www.coderanch.com/t/383310/java/java/parse-url-query-string-parameter private static Map<String, String> makeQueryMap(String query) throws UnsupportedEncodingException { String[] params = query.split("&"); Map<String, String> map = new HashMap<String, String>(); for( String param : params ) { String[] split = param.split("="); map.put(URLDecoder.decode(split[0], "UTF-8"), URLDecoder.decode(split[1], "UTF-8")); } return map; } }
符合要求:
$.post("foo",{id:5,name:"Nikos",address:{city:"Athens"}})
输出为:
>>>>>>>>>>>>> DECODED: id=5&name=Nikos&address[city]=Athens ================================ ================================ {address[city]=Athens, id=5, name=Nikos} ================================
(注意:req.getParameterNames()不起作用。打印在第4行的地图包含通常可以使用访问的所有数据request.getParameter()。请注意嵌套对象符号{address:{city:"Athens"}}→ address[city]=Athens)。
req.getParameterNames()
request.getParameter()
{address:{city:"Athens"}}
address[city]=Athens
与您的问题无关,但出于完整性考虑:
如果要使用服务器端JSON解析器,则应使用JSON.stringify该数据:
JSON.stringify
$.post("foo",JSON.stringify({id:5,name:"Nikos",address:{city:"Athens"}}))
我认为与服务器通信JSON的最佳方法是使用JAX-RS(或与之等效的Spring)。在现代服务器上,它非常简单,可以解决这些问题。