[Cxf] 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 提供的注解,主要包括以下三类:
- 请求方式注解,包括:@GET、@POST、@PUT、@DELETE
- 请求路径注解,包括:@Path ,其中包括一个路径参数
- 数据格式注解,包括:@Consumes(输入)、@Produces(输出),可使用 MediaType 常量
- 相关参数注解,包括:@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
[Cxf] cxf 相关知识整理的更多相关文章
- Redis相关知识整理
Redis相关知识整理 1. Redis和MySQL的区别?a).mysql是关系型数据库,而redis是NOSQL,非关系型数据库.mysql将数据持久化到硬盘,读取数据慢,而redis数据先存储在 ...
- podSpec文件相关知识整理
上一篇文章整理了我用SVN创建私有库的过程,本文将整理一下有关podSpec文件的相关知识. podSpec中spec的全称是“Specification”,说明书的意思.顾名思义,这是用来描述你这个 ...
- OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理
开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...
- JVM的相关知识整理和学习--(转载)
JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理.冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操 ...
- Web缓存相关知识整理
一.前言 工作上遇到一个这样的需求,一个H5页面在APP端,如果勾选已读状态,则下次打开该链接,会跳过此页面.用到了HTML5 的本地存储 API 中的 localStorage作为解决方案,回顾了 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- Android 基本控件相关知识整理
Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...
- 【杂谈】FilterChain相关知识整理
前言 做后台的,Filter肯定没少配置,但是知晓其原理的可能不多.在这之前我也不懂,但这并不影响业务开发,同时也有其他的知识要学,所以一直就没看.这阵子有点闲,刚好在看<How Tomcat ...
- Java虚拟机JVM相关知识整理
Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...
随机推荐
- Android Studio优秀插件汇总
- wap、app移动端页面常用html标签汇总
1.section 将内容组织到精确的语义块,表示页面的一部分. 2.article article表示网页的一个文章.故事. 3.header (1)用在整页的页头 (2)section或者arti ...
- Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程
一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合 ...
- javascript:void(0)和onclick=fn(this)
今天在写代码中遇到一个这样的问题.关于点击在html中添加点击事件,顺便把this对象通过参数传过去. <a href='#' \>查看详情</a> <a href='j ...
- chrome 如何官网下载谷歌浏览器离线安装包
如何官网下载chrome谷歌浏览器离线安装包 CreateTime--2017年7月4日08:38:30Author:Marydon 参考链接:http://jingyan.baidu.com/a ...
- iOS多线程常用类说明
iOS的多线程,涉及到如下一些类,这里集中做个介绍,免得混淆. 1.NSTimer 很显然,这是定时器类 2.NSTask iOS 不支持 NSTask 在很多并发操作的时候,多线程太耗资源,也太危险 ...
- vsftpd問題集
vsftpd无法看到文件:226 Transfer done (but failed to open directory). 原因:目录不是一个 world_readable目录 解决方法:在配置文件 ...
- SICP 1.21 1.22 体会
1.21 简单的将书上代码敲了一遍. 非常顺利就过了. 1.22 就悲剧了. 先按书本的意思.代码非常快就写完了.但计算的时间在机子上漂浮不定. 3-5倍之间. 代码例如以下: (define (se ...
- shell脚本分析 nginx日志访问次数最多及最耗时的页面
当服务器压力比较大,跑起来很费力时候.我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时. 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的. 下面是我在 ...
- 云中的机器学习:FPGA 上的深度神经网络
人工智能正在经历一场变革,这要得益于机器学习的快速进步.在机器学习领域,人们正对一类名为“深度学习”算法产生浓厚的兴趣,因为这类算法具有出色的大数据集性能.在深度学习中,机器可以在监督或不受监督的方式 ...