由于新的信息,即实体“ Kunde”的传输不正确,我找到了一个
解决方案 :
我明确地将实体类转换为XML / JSON(无论哪种方式都可行),然后将该XML / JSON作为String形式放入表单中。在服务器端,我将XML /
JSON字符串转换回了Entity,这很有效。
(似乎无法传输不像String或Integer 那样 的对象。)
希望这将帮助面临相同问题的每个人都通过REST将对象从客户端传输到服务器。
( 发送 XML / JSON转换后的对象的 列表 仍在测试中。我很快会在这里添加结果。)
问候,并感谢chrylis的评论和提示。
亚娜
这是解决方案的代码,但简短地说,这只是新部分。
1)XML解决方案:
在客户端将实体更改为XML字符串:
...OutputStream out = new ByteArrayOutputStream();JAXBContext context = JAXBContext.newInstance(Kunde.class);Marshaller m = context.createMarshaller();m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);m.marshal(kunde, out);out.close();Form form = new Form();form.add("entity", out.toString());...要将XML转换回服务器端的对象:
...public String test( @FormParam("entity") String entityString) { InputStream inputStream = new ByteArrayInputStream(entityString.getBytes()); Kunde kunde = JAXB.unmarshal(inputStream, Kunde.class); return "Der Name des Kunden ist: "+kunde.getVorname()+" "+kunde.getNachname();}2)JSON解决方案:
要在客户端将Entity更改为JSON String:
...OutputStream out = new ByteArrayOutputStream();ObjectMapper mapper = new ObjectMapper();mapper.writevalue(out, kunde);out.close();Form form = new Form();form.add("entity", out.toString());...要将JSON字符串转换回服务器端的对象:
...public String test( @FormParam("entity") String entityString) { InputStream inputStream = new ByteArrayInputStream(entityString.getBytes()); Kunde kunde = new ObjectMapper().read((inputStream, Kunde.class)); return "Der Name des Kunden ist: "+kunde.getVorname()+" "+kunde.getNachname();}JAXB,JAXBContext,Marshaller等类来自package
javax.xml.bind.*。ObjectMapper类来自package
org.prehaus.jackson.map.*。
PS:
因为现在传输纯String,所以您也可以使用
@QueryParam。但是我不建议这样做,因为您会将整个XML作为URL中的文本String进行传输。同样适用
@PathParam。
我建议使用JSON ,因为该格式比XML格式更细长,而细长是REST的目标。



