Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用@XMLRootElement将JSON对象解组到Java_Java_Json_Rest_Cxf_Jax Rs - Fatal编程技术网

不使用@XMLRootElement将JSON对象解组到Java

不使用@XMLRootElement将JSON对象解组到Java,java,json,rest,cxf,jax-rs,Java,Json,Rest,Cxf,Jax Rs,我正在使用ApacheCXF实现JAX-RS。我有一个POST服务,在没有@XMLRootElement的情况下,将JSON对象解组为Java,出现以下错误 javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“Customer”) 资源类别: @POST @Path("/create") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Consumes(

我正在使用ApacheCXF实现JAX-RS。我有一个POST服务,在没有@XMLRootElement的情况下,将JSON对象解组为Java
,出现以下错误

javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“Customer”)

资源类别:

@POST
@Path("/create")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response createCustomer(Customer customer) throws Exception {
------
-------
}
JAXB对象:中没有@XMLRootElement

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Customer", propOrder = {
"id",
"effectiveDate",
"customerType",
"customerName",
 ---
})
public class Customer extends ObjectBase implements Serializable
{

}
应用程序上下文:

<jaxrs:server id="restContainer" address="/">
    <jaxrs:serviceBeans>
        <ref bean="customerResource"/>
    </jaxrs:serviceBeans>       
</jaxrs:server>

我尝试将其添加为提供程序,但运气不好,我可以通过将JAX-RS提供程序添加为JSONProvider来解决这个问题。在JSONProvider中,为JSON指定相应的命名空间。在本例中,我使用了空字符串

<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
    <entry key="http://www.mycompany.com/abc/xyz/v1" value=""/>
</util:map>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider"> 
    <property name="namespaceMap" ref="jsonNamespaceMap"/>
    <property name="dropRootElement" value="false"/>
    <property name="ignoreMixedContent" value="true"/>
    <property name="serializeAsArray" value="true"/>
</bean> 

虽然我还没有找到我脑海中出现的几个问题的答案-
一,。为什么我们只在POST请求的情况下需要JSONProvider?对于GET请求,我可以获取JSON对象作为响应,而无需添加JSONProvider。

二,。如果我在customer对象中有@XMLRootElement,我也不需要JSONProvider和服务,为什么?

手动执行时
JAXBElement
而不是
YourClass
工作。也许你可以写一个拦截器来做这个?你的json请求是什么?。。。。。。。。你能用JSON更新你的帖子吗Request@KaPra我现在添加了JSON请求。
<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
    <entry key="http://www.mycompany.com/abc/xyz/v1" value=""/>
</util:map>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider"> 
    <property name="namespaceMap" ref="jsonNamespaceMap"/>
    <property name="dropRootElement" value="false"/>
    <property name="ignoreMixedContent" value="true"/>
    <property name="serializeAsArray" value="true"/>
</bean>