如何将列表转换为json并传入rest客户端url

时间:2015-09-14 12:43:50

标签: java json spring rest

我使用spring和restful web服务实现了一个应用程序。在这里,我将列表转换为json格式并尝试传入客户端URL,但我得到以下异常:

java.lang.IllegalArgumentException: Illegal character in query at index 142: http://10.248.84.132:8082/nppWebService/updateModelGPData.do?lgdCode=33589&applicationId=8&uuid=9a26038f-6dd1-40b6-b847-f2fd16366fc0&jsonData={"noOfTrainingsOrganized":2,"noOfErsParticipated":4,"noOfOfficialsParticipated":5}
    at java.net.URI.create(Unknown Source)
    at com.sun.jersey.api.client.Client.resource(Client.java:433)
    at com.org.ep.trg.webservice.ClientRestController.main(ClientRestController.java:21)
Caused by: java.net.URISyntaxException: Illegal character in query at index 142: http://10.248.84.132:8082/nppWebService/updateModelGPData.do?lgdCode=33589&applicationId=8&uuid=9a26038f-6dd1-40b6-b847-f2fd16366fc0&jsonData={"noOfTrainingsOrganized":2,"noOfErsParticipated":4,"noOfOfficialsParticipated":5}
    at java.net.URI$Parser.fail(Unknown Source)
    at java.net.URI$Parser.checkChars(Unknown Source)
    at java.net.URI$Parser.parseHierarchical(Unknown Source)
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    ... 3 more

这是我的方法:

List<ModelGPStatusEntity>list2=new ArrayList<ModelGPStatusEntity>();
list2.add(new ModelGPStatusEntity(2,4,5));
String gson=new Gson().toJson(list2);
Client client = Client.create();
WebResource webResource = client.resource(
            "http://10.248.84.132:8082/nppWebService/updateModelGPData.do?lgdCode=33589&applicationId=8&uuid=9a26038f-6dd1-40b6-b847-f2fd16366fc0&jsonData="+gson.replace("[","").replace("]",""));

ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);

if (response.getStatus() != 200) {
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}

String output = response.getEntity(String.class);
System.out.println("Output from Server .... \n");
System.out.println(output);

我有两个问题:

  1. 在url中传递json数据是否正确?如果错误,传递json并调用客户端url的最佳方法是什么。

  2. 如果正确如何解决此异常

1 个答案:

答案 0 :(得分:1)

调用client.resource()时,您传递的URI是非法的。特别是未转义的双引号可能是原因。

尝试使用UriBuilder创建有问题字符转义的有效URI。

或者,大多数REST Web服务应该能够接受带有请求正文中的JSON数据的POST,而不是URL的一部分。