簡體   English   中英

使用Ajax Post將JSON從JS發送到控制器

[英]Sending json from js to controller with ajax post

我無法從javascript向Java控制器發送json對象,

阿賈克斯

var xmlHttp = getXmlHttpRequestObject();
if(xmlHttp) {
        var jsonObj = JSON.stringify({"title": "Hello","id": 5 });
        xmlHttp.open("POST","myController",true);
        xmlHttp.onreadystatechange = handleServletPost;
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.send(jsonObj);
    }
function handleServletPost() {
    if (xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert(window.succes);
        }
    }
}

我在Java中嘗試過的方法

public void process(
        final HttpServletRequest request, final HttpServletResponse response,
        final ServletContext servletContext, final TemplateEngine templateEngine) 
        throws Exception {

     String jsonObj = request.getParameter("jsonObj");
}

它們都是空的。

我嘗試閱讀相關的文章以及多種發送數據的方法,但結果相同。 我不知道如何在Ajax中使用Jquery,所以我主要是在尋找js解決方案。

有人可以告訴我我所缺少的嗎? 我花了大約三個小時試圖弄清楚

要使JSON與POST請求一起發送,您必須在doPost方法中讀取請求的正文 這是一種實現方法:

protected void doPost(HttpServletRequest hreq, HttpServletResponse hres)
throws ServletException, IOException {
    StringWriter sw = new StringWriter();
    IOUtils.copy(hreq.getInputStream(), sw, "UTF-8");
    String json = sw.toString();

然后,您必須解析JSON。 例如,可以使用Google gson完成此操作。

假設您有一個帶有公共參數idtitle Thing類,這將是

Gson gson = new GsonBuilder().create();
Thing thing = gson.fromJson(json, Thing.class);
int id = thing.id;
String title = thing.title;

當然,除了gson之外,還有其他解決方案可以解析JSON,但是您必須解析它。

我認為您正在將URL參數與請求正文混淆。 要從請求中獲取json字符串,您需要從request.getReader()讀取它。

我已經知道了。

Json應該這樣發送:

xmlHttp.send("jsonObj="+jsonObj);

代替

xmlHttp.send(jsonObj);

為了接收它作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM