0

从我的表单中发布参数数据非常有效,但我需要使用 JSON 发布相同的信息。如何才能做到这一点。我的表格看起来像这样。

<form enctype="multipart/form-data" method="post" action="http://myrestfulservice.com/">
    <input type="text" name="name">
    <input type="text" name="email">
    <textarea name="about" rows="3"></textarea>
    <input name="file" type="file">
</form>

我的 JSON 字符串看起来像这样。

{
"name":"Josh U",
"email":"xxx@gmail.com",
"about":"Get rich programming or die tryna be something else",
"file":"@/home/josh/image.png"
}

我曾尝试使用该 JSON 字符串,但我得到以下

Exception in thread "main" java.lang.RuntimeException: Failed : HTTP error code : 500
at com.ijoshluisaac.restful.client.RESTFulClientPostUsingJavaHTTPClientLibrary.main(RESTFulClientPostUsingJavaHTTPClientLibrary.java:35)

我的 JAVA 代码看起来像这样

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

  public class RESTFulClientPostUsingJavaHTTPClientLibrary {

// JSON content to post
private static final String JSON_OBJECT = "{\"name\":\"Josh U\",\"email\":\"xxx@gmail.com\",\"about\":\"Get rich programming or die tryna be something else\",\"file\":\"/home/josh/image.png\"}";

//Web services URLs
private static final String URL_SR = "http://myrestfulservice.com/";

public static void main(String[] args) {

    try {
        URL url = new URL(URL_SR);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");


        OutputStream os = conn.getOutputStream();
        os.write(JSON_OBJECT.getBytes());
        os.flush();

        if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        String output;
        System.out.println("Successfully Executed RESTFul POST .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        conn.disconnect();

    } catch (MalformedURLException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }

}

}

4

2 回答 2

0

我认为你必须做两个步骤:

  1. 首先是将表单内容转换为 JS 对象(硬步骤)。
  2. 其次将您的 JS 对象转换为 JSON 格式(简单的步骤)。

您只需要向jQuery serializeArray添加更多功能即可为我们提供所需的 JS 对象:

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

然后使用JSON.stringify函数将 JS 对象转换为 JSON 格式。你可以在这里找到更多信息

于 2013-05-11T10:04:20.110 回答
-1

使用 jquery(因为它提供了许多开箱即用的功能,例如将表单参数序列化为 json)并使用下面的代码

var frm = $(document.myform);
var data = JSON.stringify(frm.serializeArray());

 or

var data = $('#yourForm).serializeArray();

http://api.jquery.com/serializeArray/

var url = 'YourURL';

$.ajax({
  url: url,
  dataType: 'json',
  data: data ,
  type: 'POST',
  success: function(data) {

  }
 });
于 2013-05-11T09:49:50.557 回答