resteasy 参数简单解析
概述
resteay对参数解析
get
@PathParam 匹配url变量的,假如@path("/{param}/a"),url访问/adc/a,则@PathParam("param")获取的就adc.
@QueryParam("name"),url访问name=张三&id=1,则@QueryParam("name")的值就是"张三"
post
测试方式可采用postman的方式
- application/x-www-form-urlencoded 一般表单的默认提交方式,提交数据将会按照key1=value1&key2=value2的形式进行ur编码
- multipart/form-data 一般上传文件用到,其生成的数据会已分割线分割不同的字段,正文包含正文以及正文的描述,诸如content-disposition,filename的描述信息,文本或者二进制的正文
- application/json 这数据已json的格式传递,ajax经常用到,将一个form表单序列化后提交,这种格式有json数据天然的优势,可以传递层级较多的信息
- text/xml 这个就用到比较少,xml格式文件远不如json来的方便,更适用于xml-rpc协议这种http中用xml进行数据交换的场景
- ....
制定消费类型 ;@Consumes 默认*/*
application/x-www-form-urlencoded
@FormParam("name"),MultivaluedMap<String,String> params
multipart/form-data
- 对简单的文本或者pojo的value的形式,可直接用map--('中文乱码,看下)
- 文件上传,可使用MultipartFormDataInput
raw
- txt为content_type=text/plain,原生的数据,直接用一个string 参数接受就可以
- json对应content_type=application/json,也可以直接用string接受
- js对应content_type=application/json
- ....
binary
public class ReadCharsetInterceptor implements ReaderInterceptor {@Overridepublic Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {context.setProperty(InputPart.DEFAULT_CHARSET_PROPERTY,"UTF-8");//resteasy.provider.multipart.inputpart.defaultCharset//context.setProperty(InputPart.DEFAULT_CONTENT_TYPE_PROPERTY,"UTF-8");//resteasy.provider.multipart.inputpart.defaultContentTypereturn context.proceed();}}
使用pojo接收参数
一般参数
import javax.ws.rs.QueryParam;public class TestGetVo {@QueryParam("name")private String name;@QueryParam("age")private Integer agae;@QueryParam("marriage")private Boolean marriage;@QueryParam("time")private DateParam time;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAgae() {return agae;}public void setAgae(Integer agae) {this.agae = agae;}public Boolean getMarriage() {return marriage;}public void setMarriage(Boolean marriage) {this.marriage = marriage;}public DateParam getTime() {return time;}public void setTime(DateParam time) {this.time = time;}
}
testpostvo
import javax.ws.rs.FormParam;public class TestPostVo {@FormParam("name")private String name;@FormParam("age")private Integer agae;@FormParam("marriage")private Boolean marriage;@FormParam("time")private DateParam time;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAgae() {return agae;}public void setAgae(Integer agae) {this.agae = agae;}public Boolean getMarriage() {return marriage;}public void setMarriage(Boolean marriage) {this.marriage = marriage;}public DateParam getTime() {return time;}public void setTime(DateParam time) {this.time = time;}
}
date
date封装(date不能直接接收)
public class DateParam {private final Date date;public DateParam(String time){if (time == null) {this.date = null;return;}//根据传递的参数格式不同进行不同 的转变this.date = new Date(Long.parseLong(time));}public Date getDate() {return date;}
}
test
postman等工具类
import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;import org.jboss.resteasy.annotations.Form;
import org.springframework.stereotype.Component;@Path("/test")
@Component
public class TestResource {/**********************接收参数解析test* 测试参数String Integer Date Boolean* 测试方式:post(x-www-form-urlencoded) || get* * 注:解析参数接收都是以string的形式接收,对象的valueOf 或者构造器(参数必须为String)进行转换。所以long ,integer ,string,boolean可直接转* 但date需定义一个包装类* ***********************//*****************post***********************///@Form@POST@Path("/pojo")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)public Response testPostPojo(@Form TestPostVo vo) {System.out.println("name:"+ vo.getName());System.out.println("age:"+ vo.getAgae());System.out.println("marriage:"+ vo.getMarriage());System.out.println("time:" + (vo.getTime()==null?"null":vo.getTime().getDate()));return Response.status(200).entity("操作成功").build(); }//@FormParam@POST@Path("/param")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)public Response testPostParam(@FormParam("name") String name, @FormParam("age") Integer age,@FormParam("time") DateParam time, @FormParam("marriage") Boolean marriage) throws Exception {System.out.println("name:"+ name);System.out.println("age:"+age);System.out.println("marriage:"+marriage);System.out.println("time:" + (time == null ? "null" : time.getDate()));return Response.status(200).entity("操作成功").build(); }/*****************get***********************///@QueryParam@GET@Path("/param")public Response testGetParam(@QueryParam("name") String name, @QueryParam("age") Integer age,@QueryParam("time") DateParam time, @QueryParam("marriage") Boolean marriage) throws Exception {System.out.println("name:"+ name);System.out.println("age:"+age);System.out.println("marriage:"+marriage);System.out.println("time:" + (time == null ? "null" : time.getDate()));return Response.status(200).entity("操作成功").build(); }//@BeanParam@GET@Path("/pojo")public Response testGetPojo(@BeanParam TestGetVo vo) throws Exception {System.out.println("name:"+ vo.getName());System.out.println("age:"+ vo.getAgae());System.out.println("marriage:"+ vo.getMarriage());System.out.println("time:" + (vo.getTime()==null?"null":vo.getTime().getDate()));return Response.status(200).entity("操作成功").build(); }/**********************接收参数解析test***********************/
}
httpclient等java客户端
import java.util.ArrayList;
import java.util.List;import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;public class TestParam {private static RequestConfig requestConfig;static {// 基础配置requestConfig = RequestConfig.custom()// 从连接池中获取连接的超时时间(ms).setConnectionRequestTimeout(3000)// 与服务器连接超时时间:httpclient会创建一个异步线程用以创建socket连接,此处设置该socket的连接超时时间(ms).setConnectTimeout(3000)// socket读数据超时时间:从服务器获取响应数据的超时时间(ms).setSocketTimeout(3000).build();}public static void main(String[] args) {CloseableHttpClient httpClient = null;httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();CloseableHttpResponse response = null;
// String url = "http://localhost:8083/myapp/api/param";String url = "http://localhost:8083/myapp/api/pojo";/*******************post***********************/HttpPost httpPost = new HttpPost(url);try {//httpPost.setEntity(new StringEntity(getStringEntity(), "utf-8"));httpPost.setEntity(new UrlEncodedFormEntity(getPostparams(), "utf8"));response = httpClient.execute(httpPost);HttpEntity httpEntity = response.getEntity();if (httpEntity != null) {String result = EntityUtils.toString(httpEntity);System.out.println(result);// 确保HTTP响应内容全部被读出或者内容流被关闭EntityUtils.consume(httpEntity);}} catch (Exception e) {e.printStackTrace();} finally {httpPost.releaseConnection();try {if (response != null) {response.close();;}
/* if (httpClient != null) {//此处注释仅为了测试方便httpClient.close();}*/} catch (Exception e2) {e2.printStackTrace();}}/*******************get***********************/
// String getUrl="http://localhost:8083/myapp/api/param?name=123&age=1&time=1500480000000&marriage=false";String getUrl="http://localhost:8083/myapp/api/pojo?name=123&age=1&time=1500480000000&marriage=false";HttpGet httpget = new HttpGet(getUrl);try {response = httpClient.execute(httpget);HttpEntity httpEntity = response.getEntity();if (httpEntity != null) {String result = EntityUtils.toString(httpEntity);System.out.println(result);// 确保HTTP响应内容全部被读出或者内容流被关闭EntityUtils.consume(httpEntity);}} catch (Exception e) {e.printStackTrace();} finally {httpget.releaseConnection();try {if (response != null) {response.close();;}if (httpClient != null) {httpClient.close();}} catch (Exception e2) {e2.printStackTrace();}}}private static List<NameValuePair> getPostparams() {// 放入一个List集合中List<NameValuePair> list = new ArrayList<>();list.add(new BasicNameValuePair("name", "张三"));list.add(new BasicNameValuePair("age", "1"));list.add(new BasicNameValuePair("marriage", "false"));list.add(new BasicNameValuePair("time", "1500480000000"));return list;}private static String getStringEntity() {// 放入一个List集合中return "{'name':'张三','age':'1,'marriage':'false','time':'1500480000000'}";}
}
resteasy 参数简单解析相关推荐
- java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】
本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...
- Linux C代码实现主函数参数选项解析
软件开发中难免会对命令行输入参数做解析.判断.本文给出2个此方面的示例. 1.手动解析版本 思路十分简单,使用argc.argv,逐个字符比较,得到要想的参数名字即进行判断.解析. #include ...
- Linux操作系统内核启动参数详细解析[转]
Linux操作系统内核启动参数详细解析http://os.51cto.com/art/200902/110080.htmhttp://os.51cto.com 2009-02-17 16:07 佚名 ...
- java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml
一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...
- 三、nginx服务的nginx.conf的参数配置解析
前一篇:二.nginx服务的nginx.conf配置参数解析 后一篇:四.nginx服务器的参数配置解析 目录 一.虚拟主机设定模块 1.upstream模块配置样式 1.1.默认配置 1.2.wei ...
- 百度_谷歌_雅虎搜索引擎URL参数全解析
一.百度搜索引擎URL参数全解析 在搜索引擎的RUL地址参数中,我们可以清晰的知道,该软件是否与搜索引擎进行了点击付费类的合作,我们以百度搜索的URL参数部分举例说明如下: http://www.ba ...
- 邻近算法(KNN)原理简单解析
邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...
- python常驻运行_Python常驻任务实现接收外界参数代码解析
实现一个简单的常驻任务是容易的,写一个while True就可以了,但是同时要能接收外界传来的参数,就稍微有点复杂. 我第一个想到的是网络编程中的server/client模式 server作为常驻进 ...
- el-admin框架简单解析
el-admin框架简单解析 el-admin 简单了解 使用框架的四大步 前端文件架构 el-admin前端部分解析 前端Vue目录结构 Layout 布局 mixins 混入模式 router 路 ...
最新文章
- 马斯克员工参与新冠研究,论文登上Nature子刊
- 初学者 | 一文读懂命名实体识别
- python生成报告_python生成测试报告
- m3u8地址_「波波带你手动提取网页视频」04讲 Network和Elements提取m3u8链接
- Android 解决导入多个module时jar包冲突
- 【转】通过第三方工具体验Microsoft Graph
- 面试官 | count(1)、count(*) 、count(列名) 有什么区别?
- 路径获取文件名通用方法
- 【script】python中的函数式编程
- 【汉化】DevExpress插件中RichEdit控件的自定义汉化方法
- python学习笔记——多线程编程
- SystemVerilog搭建测试平台---第一章:验证导论
- python按内容分割txt文件_python 读txt文件,按‘,’分割每行数据操作
- 悉尼大学BUSS6002Assignment1课业解析
- 一篇文章带你认识数学建模中的数据拟合
- 苹果微信更新不了最新版本_微信登录不了,微信提示版本过低,请升级最新版本的解决办法...
- android版会说话的汤姆猫游戏源码
- 新媒体运营之如何低成本,有效地进行企业公众号拉新,获取10万+潜在用户? 黎想
- matlab 坐标移动,如何移动坐标轴到指定的位置
- GFP:新一代多业务传输技术(转)