如何将JSON对象从Javascript传递给Java

时间:2015-05-23 07:01:25

标签: java ajax json rest

我要做的是通过用户交互从我的前端代码发起ajax调用。这称为我编写的Java Restful服务。而这个Java函数调用另一个服务。

我需要中间的java服务,因为我需要以" MyModel"的格式将输入发送到其他服务。

问题是,AJAX调用有效,但无法获取我发送的JSON对象。你在下面的Java函数中看到我创建了" param1" :" asdasd"这是第二次。这是因为它无法从前端获取JSON数据。它应该使用sendInputs函数的参数动态创建。

顺便说一句,当我调试值时,String输入是这样的:""

Javascript AJAX调用:

var paramData = {"param1" : "asdasd"};

$.ajax({
    type : 'GET',
    url : "/api/v2/proxy",
    dataType : "json",
    headers : {
        "Service-End-Point" : "http://localhost:9000/service/myService/sendInputs"
    },
    statusCode : {
        200 : function(data) {
        }
    },
    contentType : "application/json",
    data : JSON.stringify(paramData),
    error : function(error) {

    }
});

Java使用:

@GET
@Path("/sendInputs")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String sendInputs(String input) {
    String result = null;

    //define the service endpoint to be added the default URL
    String serviceEndpoint = "otherService/tool/runTool";

    List<MyModel> modelParameterList = new ArrayList<MyModel>();

    MyModel inputParameter = null;
    inputParameter = new MyModel("param1", "asdasd");
    modelParameterList.add(inputParameter);

    //convert the Java Map to a json string using Jackson ObjectMapper
    String jsonStringOfInputParameters = toJSON(modelParameterList);

    WebClient client = WebClient
            .create("http://localhost:9000");

    result = client.path(serviceEndpoint)
            .query("tool", "myTool")
            .query("input", jsonStringOfInputParameters)
            .accept("application/json")
            //tells cxf to convert the json to a string type upon return
            .get(String.class);

    // Return the json result as a string
    return result;
}

2 个答案:

答案 0 :(得分:0)

您的paramData变量已经是有效的json。我认为你不需要再次使用JSON.Stringify()。这是什么是ajax调用:

statusCode : {
        200 : function(data) {
        }
    }

状态代码应该来自服务器作为响应。

答案 1 :(得分:0)

首先,你的ajax标题应该是这样的:

headers: {
        Accept: "application/json; charset=utf-8",
        "Content-Type": "application/json; charset=utf-8"
},

URL:

url: "http://localhost:9000/service/myService/sendInputs"

其次,你需要MyModel param1字段,还有setter和getter。这可以是您的服​​务方式:

public String sendInputs(MyModel model)
{
      //model.getParam1() will be "asdasd"
}