我有一个HTML表单,它使用textarea字段提交XML:
<form action="rest" method="POST">
<textarea name="xml" rows="10" cols="30" ></textarea>
<input type="submit" value="Invoke REST">
</form>
现在我想在REST Web服务中使用XML(我正在使用Java EE 7和WildFly CR1)。 我尝试过使用:
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createItemFromXML(@FormParam("xml") Customer c) {
ejb.addToList(c);
return Response.ok("Created customer ").build();
}
导致 java.lang.RuntimeException:无法在公共javax.ws.rs.core.Response上找到对javax.ws.rs.FormParam(“xml”)采用String参数或valueOf()或fromString()方法的构造函数基本类型的com.sample.SimpleRESTService.createItemFromXML(com.sample.Customer):com.sample.SimpleProperty
我是否必须使用Stream作为表单参数(并手动转换为XML)或者有更简单的方法吗?
编辑: 我也尝试过:
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createPropertyFromXml( Customer c) {
ejb.addToList(c);
return Response.ok("Created customer " + n).build();
}
但是现在出现错误:javax.ws.rs.NotSupportedException:无法使用内容类型 似乎它无法自动从表单字段转换为XML .... 感谢
答案 0 :(得分:0)
AFAIK,您应该将c
参数设置为String,然后在createItemFromXML
方法中解析它,或者您可以删除方法参数上的@FormParam
注释并使用JAXB
课程上的Customer
个注释。在后一种情况下,Wildfly的底层JAX-RS实现会将传入的XML请求主体转换为Customer
的实例。