如何将表单数据发布为JSON格式

ogq8wdun  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(208)

从我的表单中发布参数数据工作得很好,但是我需要使用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();

    }

}

}

kjthegm6

kjthegm61#

我认为你必须做两个步骤:
1.第一步是将表单内容转换为JS对象(困难步骤)。
1.第二步,将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格式。

q9rjltbz

q9rjltbz2#

使用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) {

  }
 });

相关问题