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

时间:2013-05-11 09:38:42

标签: java json rest

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

    }

}

}

2 个答案:

答案 0 :(得分:0)

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

  1. 首先是将表单内容转换为JS对象(硬步)。
  2. 第二次将您的JS对象转换为JSON格式(简单步骤)。
  3. 您只需要向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格式。您可以找到更多信息here

答案 1 :(得分:-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) {

  }
 });