我使用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);
我有两个问题:
在url中传递json数据是否正确?如果错误,传递json并调用客户端url的最佳方法是什么。
如果正确如何解决此异常
答案 0 :(得分:1)
调用client.resource()时,您传递的URI是非法的。特别是未转义的双引号可能是原因。
尝试使用UriBuilder创建有问题字符转义的有效URI。
或者,大多数REST Web服务应该能够接受带有请求正文中的JSON数据的POST,而不是URL的一部分。