cxf 相关知识整理

① 请求方式为GET

   @GET
    @Path(value = "/userAddressManage")
    @Produces( { MediaType.APPLICATION_JSON, "text/html; charset=UTF-8" })
    public BuyerAddressResponseModel userAddressManage(
            @QueryParam("buyerTel") String buyerTel,
              @QueryParam("detailAddress") String detailAddress);

 和POST请求方式对应的获取参数数据的方式是: @QueryParam

② 请求方式为POST

通过GET的方式来提交数据,参数的长度是都限制的,当数据的长度超过了限制,请求会失败。

这种情况下就不得不使用POST请求了。

    @POST
    @Path(value = "/addOrder")
    @Produces( { MediaType.APPLICATION_JSON, "text/html; charset=UTF-8" })
    public OrderResponseModel addOrder(
            @FormParam("orderInfo") String orderInfo,
            @FormParam("orderDetailsList") String orderDetailsList,
            @FormParam("addressInfo") String addressInfo);

 和POST请求方式对应的获取参数数据的方式是: @FormParam

③ CXF相关注解整理

1)@WebService 和 @WebMethod 是 WSDL 映射 Annatotion。描述 Web Service 的 WSDL 文档元素和 Java 源代码联系在一起。

2)@WebParam 用来获取请求参数

3)@WebResult用来定义返回值

4)@SOAPBinding 是一个绑定的 annotation 用来说明网络协议和格式。 

使用annotation 定义了webservice

import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import com.cxf.pojo.User;

@WebService(targetNamespace = "http://jdk.study.hermit.org/client")
public interface UserService {
    @WebMethod(operationName = "Insert")
    public void insert(        @WebParam(name = "userId") String userid,
            @WebParam(name = "userName") String username,
            @WebParam(name = "userEmail") String useremail,
            @WebParam(name = "userAge") int userage);

    @WebMethod(operationName = "GetUserById")
    @WebResult(name = "result")
    public User getUserById(@WebParam(name = "userid") String userid);

    @WebMethod(operationName = "GetAllUsers")
    @WebResult(name = "result")
    public List getAllUsers();
}

实现类如下:

import  java.util.List;
import  javax.jws.WebService; 

import  com.cxf.dao.UserDao;
import  com.cxf.pojo.User;
import  com.cxf.service.UserService; 

@WebService (endpointInterface= "com.cxf.service.UserService" )
publicclass UserServiceImpl  implements  UserService { 

  private UserDao  userDao ;
  public List getAllUsers() { return userDao .findAllUser(); }
  public User  getUserById(String userid) { return userDao .findUserById(userid);} 

  publicvoid insert(String userid, String username, String useremail,  int  userage) {
    User user= new  User();
    user.setUserage(userage);
    user.setUseremail(useremail);
    user.setUserid(userid);
    user.setUsername(username);
    userDao .insert(user);
    System. out .println( "insert successfully!" );
  } 

  public   void  setUserDao(UserDao userDao) {
    this . userDao  = userDao;
  }
}
注意:实现类中的@WebService ,其中的 endpointInterface 成员指定了该类实现的接口 

下面介绍restful在springMVC下的注解

  Annotation 注解在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。 
@Path       定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello 在类和方法上使用@GET       这意味着以下方法可以响应 HTTP GET 方法@Produces   以纯文本方式定义响应内容 MIME 类型@Context    使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext @FormParam  接收POST方式提交的参数@QueryParam     接收GET方式提交的参数@Consumes    声明该方法使用 HTML FORM
@Produces( { MediaType.APPLICATION_JSON, "text/html; charset=UTF-8" })

定义REST接口服务

package demo.ws.rest_cxf;

import java.util.List;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

public interface ProductService {

    @GET
    @Path("/products")
    @Produces(MediaType.APPLICATION_JSON)
    List<Product> retrieveAllProducts();

    @GET
    @Path("/product/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    Product retrieveProductById(@PathParam("id") long id);

    @POST
    @Path("/products")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    List<Product> retrieveProductsByName(@FormParam("name") String name);

    @POST
    @Path("/product")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Product createProduct(Product product);

    @PUT
    @Path("/product/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Product updateProductById(@PathParam("id") long id, Map<String, Object> fieldMap);

    @DELETE
    @Path("/product/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    Product deleteProductById(@PathParam("id") long id);
}

以上 ProductService 接口中提供了一系列的方法,在每个方法上都使用了 JAX-RS 提供的注解,主要包括以下三类:

  1. 请求方式注解,包括:@GET、@POST、@PUT、@DELETE
  2. 请求路径注解,包括:@Path ,其中包括一个路径参数
  3. 数据格式注解,包括:@Consumes(输入)、@Produces(输出),可使用 MediaType 常量
  4. 相关参数注解,包括:@PathParam(路径参数)、@FormParam(表单参数),此外还有 @QueryParam(请求参数)

针对 updateProductById 方法,简单解释一下:

该方法将被 PUT:/product/{id} 请求来调用,请求路径中的 id 参数将映射到 long id 参数上,请求体中的数据将自动转换为 JSON 格式并映射到 Map<String, Object> fieldMap 参数上,返回的 Product 类型的数据将自动转换为 JSON 格式并返回到客户端。

参考网址:

http://my.oschina.net/huangyong/blog/294324

http://www.cnblogs.com/hoojo/archive/2012/07/23/2605219.html

时间: 2024-10-29 19:11:48

cxf 相关知识整理的相关文章

链表的相关知识整理

链表的相关知识整理 什么是链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 链表与数组的区别 回忆下数组的概念 ,所谓数组,是相同数据类型的元素按一定顺序排列的集合.根据概念我们可以知道数组在内存中连续,链表不连续:由于不同的存储方式导致数组静态分配内存,链表动态分配内存,数组

MFC相关知识整理

按:在该文档中整理我在做MFC相关编程时遇到的问题以及当时解决时所参考的资料.标准C/C++相关的问题不会放在这个帖子中,请移步:http://blog.csdn.net/edychang/article/details/37561701 1._T/_L宏:http://blog.csdn.net/panjean/article/details/6011090 2.CListCtrl: http://blog.csdn.net/bingxuewujian/article/details/7050

Redis相关知识整理

Redis相关知识整理 1. Redis和MySQL的区别?a).mysql是关系型数据库,而redis是NOSQL,非关系型数据库.mysql将数据持久化到硬盘,读取数据慢,而redis数据先存储在缓存中,读取速度快,但是保存时间有限,最后按需要可以选择持久化到硬盘. b).mysql作为持久化数据库,每次访问都要在硬盘上进行I/O操作.频繁访问数据库会在反复连接数据库上花费大量时间.redis则会在缓存区存储大量频繁访问的数据,当浏览器访问数据的时候,先访问缓存,如果访问不到再进入数据库.

OpenCV&amp;Qt学习之四——OpenCV 实现人脸检测与相关知识整理

开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译安装OpenCV. 网上能够找到关于OpenCV人脸检测的例子也比较多,大多也都是基于这个例程来更改,只是多数使用的是OpenCV 1.0的版本,而OpenCV2.0以后由于模块结构的更改,很多人并没有将例程运行起来.如果是新版的OpenCV跑旧的例程,编译运行出错的话,需要确保: #include

Linux动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序, 动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执 行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以 整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. //elfhash.h #include <stdio.h> unsign

Linux 动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //elf

Apache web服务器的相关知识整理及简要说明

本文将梳理Apache    web网站服务器的相关知识,以及在CentOS6.7环境中简单配置Apache web网站的相关用法! 一. Apache web程序安装 利用光盘,制作本地RPM镜像源,利用yum安装httpd程序包. (1)挂载本地光盘 [[email protected] ~]# mount /dev/sr0 /media/cdrom mount: block device /dev/sr0iswrite-protected, mounting read-only [[ema

JVM的相关知识整理和学习--(转载)

JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理.冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操作码和地址码组成,操作码决定了操作类型和所操作的数的数字类型,地址码则指出地址码和操作数.从dos到window8,从unix到ubuntu和CentOS,还有MAC OS等等,不同的操作系统指令集以及数据结构都有着差异,而JVM通过在操作系统上建立虚拟机,自己定义出来的一套统一的数据结构和操作指令

转自牛客网-JVM的相关知识整理和学习

JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理.冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操作码和地址码组成,操作码决定了操作类型和所操作的数的数字类型,地址码则指出地址码和操作数.从dos到window8,从unix到ubuntu和CentOS,还有MAC OS等等,不同的操作系统指令集以及数据结构都有着差异,而JVM通过在操作系统上建立虚拟机,自己定义出来的一套统一的数据结构和操作指令