Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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
Java 对象作为Apache CXF REST服务方法中的参数_Java_Web Services_Rest_Cxf - Fatal编程技术网

Java 对象作为Apache CXF REST服务方法中的参数

Java 对象作为Apache CXF REST服务方法中的参数,java,web-services,rest,cxf,Java,Web Services,Rest,Cxf,我需要做的就是在用ApacheCXF编写的RESTAPI中使用web服务方法来接受如下请求(最好将自定义对象指定为参数类型) { “行动”:“阅读”, “资源:“新资源” } 目前,我的方法也可以这样做,但它希望JSON字符串作为请求体。但我需要服务向客户端描述请求参数。这意味着在wadl定义中,它应该显示应从客户端发送的确切参数。理想的定义类似于 <resource path="by-attrib"> <method name="GET"> <re

我需要做的就是在用ApacheCXF编写的RESTAPI中使用web服务方法来接受如下请求(最好将自定义对象指定为参数类型)


{
“行动”:“阅读”,
“资源:“新资源”
}

目前,我的方法也可以这样做,但它希望JSON字符串作为请求体。但我需要服务向客户端描述请求参数。这意味着在wadl定义中,它应该显示应从客户端发送的确切参数。理想的定义类似于

<resource path="by-attrib">
  <method name="GET">
    <request>
     <param name="Accept" style="header" type="xs:string"/>
     <param name="Auth_Type" style="header" type="xs:string"/>
     <param name="Authorization" style="header" type="xs:string"/>
     <representation mediaType="application/json">
        <param name="action" style="plain" type="xs:string"/>
        <param name="resource" style="plain" type="xs:string"/>            
     </representation>
   </request>
   <response>
    <representation mediaType="application/json">
      <param name="result" style="plain" type="xs:string"/>
    </representation>
   </response>
</method>
</resource>

这在CXF中可能吗? 请注意,使用@FormParam不是我所需要的,如果我使用form params,我会在使用XML向同一方法发送请求时遇到问题


谢谢你实际上我找到了答案

它是用豆子注射的

在他们的文档中有描述,很抱歉没有RTFM

参数下的bean

基本思想是使用JavaBean(带有setter和getter的零参数构造函数)并将其添加到web服务参数中


但是,您需要指定其中一个
@QueryParam
@FormParam
@PathParam
,它才能工作

实际上我找到了答案

它是用豆子注射的

在他们的文档中有描述,很抱歉没有RTFM

参数下的bean

基本思想是使用JavaBean(带有setter和getter的零参数构造函数)并将其添加到web服务参数中


但是,您需要指定其中一个
@QueryParam
@FormParam
@PathParam
,它才能与CXF和jackson一起工作

服务接口(使用POST,而不是GET)

服务impl(没什么特别的)

数据对象(使用jaxb简化json或xml的编码/解码)

CXF服务器和jackson.jackson provider类的spring配置取决于您使用的CXF版本。因此,如果您的CXF软件包中没有JacksonJaxbJsonProvider,请查看文档

<jaxrs:server id="yourServiceREST" address="/services">
        <jaxrs:serviceBeans>
            <ref bean="yourService" />
        </jaxrs:serviceBeans>

        <jaxrs:providers>
            <!--<ref bean="authenticationFilter" />-->
            <!--<ref bean="exceptionMapper" />-->
            <!-- <ref bean="corsFilter" /> -->
            <ref bean="jackson" />
        </jaxrs:providers>
    </jaxrs:server>

<bean id="yourService" class="YourServiceImpl">
</bean>

<bean id="jackson" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />

我不知道WADL是否能很好地生成,因为有时CXF会失败。幸运吧!

CXF和jackson的例子

服务接口(使用POST,而不是GET)

服务impl(没什么特别的)

数据对象(使用jaxb简化json或xml的编码/解码)

CXF服务器和jackson.jackson provider类的spring配置取决于您使用的CXF版本。因此,如果您的CXF软件包中没有JacksonJaxbJsonProvider,请查看文档

<jaxrs:server id="yourServiceREST" address="/services">
        <jaxrs:serviceBeans>
            <ref bean="yourService" />
        </jaxrs:serviceBeans>

        <jaxrs:providers>
            <!--<ref bean="authenticationFilter" />-->
            <!--<ref bean="exceptionMapper" />-->
            <!-- <ref bean="corsFilter" /> -->
            <ref bean="jackson" />
        </jaxrs:providers>
    </jaxrs:server>

<bean id="yourService" class="YourServiceImpl">
</bean>

<bean id="jackson" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />

我不知道WADL是否能够很好地生成,因为有时CXF会失败。幸运的是!

您需要rest服务文档,以便客户端能够正确地看到它???@Gladiator9是的,我需要确保客户端知道向服务发送什么您可以使用swagger。请检查swagger和apache CXF以了解更多信息implemenatation@Gladiator9谢谢你的指针,我会看一看Hi ManZzup让我知道你的结果。你需要rest服务文档以便客户端可以正确地看到它???@Gladiator9是的,我需要确保客户端知道向服务发送什么你可以使用swagger。请检查swagger和apache cxf以了解更多信息implemenatation@Gladiator9谢谢对于指针,我将进行查找。让我知道您的结果。
有什么用?如果不使用这些映射来测试返回不同内容类型的GET服务,代码工作得很好。例如,GET/resource.xml或GET/resource.json。它没有任何用处。我将删除
,代码的用途是什么如果没有这些映射,则无法测试返回不同内容类型的GET服务。即GET/resource.xml或GET/resource.json。例如,它没有用处。我将删除它
@XmlRootElement(name = "YourData")
public class YourData {
    private String action;
    private String resource;
    //getter & setters
}

@XmlRootElement(name = "Result")
public class Result {
    private String result;
    //getter & setters
}
<jaxrs:server id="yourServiceREST" address="/services">
        <jaxrs:serviceBeans>
            <ref bean="yourService" />
        </jaxrs:serviceBeans>

        <jaxrs:providers>
            <!--<ref bean="authenticationFilter" />-->
            <!--<ref bean="exceptionMapper" />-->
            <!-- <ref bean="corsFilter" /> -->
            <ref bean="jackson" />
        </jaxrs:providers>
    </jaxrs:server>

<bean id="yourService" class="YourServiceImpl">
</bean>

<bean id="jackson" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
POST /services/yourservice
{  "action":"read", "resource:"new resource"}