RestFul风格WebService接口的定义

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。即”表现层状态转化”。如果一个架构符合REST原则,就称它为RESTful架构。

关于RESTful架构的理解,这篇博文讲述的很精彩:
博文地址:http://www.ruanyifeng.com/blog/2011/09/restful.html**

定义RESTful风格的WebService,通过cxf整合spring,顺便记录本人在定义REST接口遇到的一些问题以及我的解决办法。

一,环境
一如既往,环境配置,采用maven的项目结构,添加cxf相关依赖

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.7.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.7.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>2.7.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-bundle-jaxrs</artifactId>
            <version>2.7.9</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-  jetty</artifactId>
            <version>2.7.9</version>
        </dependency>

spring配置文件配置接口定义,这里采用Jackson解析json,所以需要在pom.xml中添加Jackson的依赖包。

<!-- RESTFUL -->
    <jaxrs:server id="userServiceContainer" address="/userRestService">
        <jaxrs:serviceBeans>
            <ref bean="userService" />
        </jaxrs:serviceBeans>
        <jaxrs:extensionMappings>
            <entry key="json" value="application/json" />
        </jaxrs:extensionMappings>
        <jaxrs:providers>
            <ref bean="jsonProvider" />
        </jaxrs:providers>
    </jaxrs:server>
    <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />

Service接口实现定义如下:

@Service("userService")
public class UserServiceImpl implements UserService {
}

在Service接口上定义GET方法

@GET
@Path("/getUserInfoById/{userId}")
@Produces({MediaType.APPLICATION_JSON})
public UserInfo getUserInfoById(@PathParam("userId") String userId);

@GET定义方法为get方法,@Produces定义接口返回的数据类型为json,@Path定义访问接口的路径,花括号内是传递的参数名,@PathParam定义传递的参数名。

POST方法使用:

@POST
@Path("/modifyUser")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public void modifyUser(UserInfo userInfo);

@Consumes定义是传递的参数类型,需要注意的是当选择传递的数据类型是json参数类型时,post方法无法解析多个数据,解决办法就是修改参数类型,将参数类型改成MediaType.APPLICATION_FORM_URLENCODED,用@FormParam来定义传递的参数名称

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值