那里似乎有很多版本。这就是我在做的事情。我有一个RESTful Web服务,我正在尝试将Java对象编组到JAXB中并通过网络将其发送到Web服务。这是我的客户端代码
private static void performPost(JAXBObject obj) {
String url ="http://www.example.com/test?xml=";
HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("accept-charset", charset);
urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("accept", jsonContentType);
JAXBContext jaxbContext = JAXBContext.newInstance(JAXBObject.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(obj, urlConnection.getOutputStream());
int rspCode = urlConnection.getResponseCode();
...
}
网络服务代码是
@POST
@Produces("application/json")
@Path("test")
public String doIt(@QueryParam("xml") String str) {
int ret = doSomething(str);
return new Gson().toJson(ret);
}
程序正在达到doIt,但String str中没有任何内容。 我做错了什么?
答案 0 :(得分:4)
您问题中的代码是将XML作为消息发送,但是尝试将其作为查询参数接收。如果您要将XML作为消息发送,则str
参数不应使用@QueryParam
进行注释。查询参数是在?之后出现的URL的一部分? (即http://www.example.com/foo/bar?limit=25,limit
是查询参数)。您正在尝试捕获不需要注释的XML消息正文。