概述

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

对应的content_type有多种
  • txt为content_type=text/plain,原生的数据,直接用一个string 参数接受就可以
  • json对应content_type=application/json,也可以直接用string接受
  • js对应content_type=application/json
  • ....

binary

用byte[]接收
解决multipart/form-data参数中文乱码问题 定义一个ReaderInterceptor( 或者ContainerResponseFilter),以ReaderInterceptor为例
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接收参数

一般参数

testgetvo
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 参数简单解析相关推荐

  1. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  2. Linux C代码实现主函数参数选项解析

    软件开发中难免会对命令行输入参数做解析.判断.本文给出2个此方面的示例. 1.手动解析版本 思路十分简单,使用argc.argv,逐个字符比较,得到要想的参数名字即进行判断.解析. #include ...

  3. Linux操作系统内核启动参数详细解析[转]

    Linux操作系统内核启动参数详细解析http://os.51cto.com/art/200902/110080.htmhttp://os.51cto.com 2009-02-17 16:07 佚名 ...

  4. java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml

    一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...

  5. 三、nginx服务的nginx.conf的参数配置解析

    前一篇:二.nginx服务的nginx.conf配置参数解析 后一篇:四.nginx服务器的参数配置解析 目录 一.虚拟主机设定模块 1.upstream模块配置样式 1.1.默认配置 1.2.wei ...

  6. 百度_谷歌_雅虎搜索引擎URL参数全解析

    一.百度搜索引擎URL参数全解析 在搜索引擎的RUL地址参数中,我们可以清晰的知道,该软件是否与搜索引擎进行了点击付费类的合作,我们以百度搜索的URL参数部分举例说明如下: http://www.ba ...

  7. 邻近算法(KNN)原理简单解析

    邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...

  8. python常驻运行_Python常驻任务实现接收外界参数代码解析

    实现一个简单的常驻任务是容易的,写一个while True就可以了,但是同时要能接收外界传来的参数,就稍微有点复杂. 我第一个想到的是网络编程中的server/client模式 server作为常驻进 ...

  9. el-admin框架简单解析

    el-admin框架简单解析 el-admin 简单了解 使用框架的四大步 前端文件架构 el-admin前端部分解析 前端Vue目录结构 Layout 布局 mixins 混入模式 router 路 ...

最新文章

  1. 马斯克员工参与新冠研究,论文登上Nature子刊
  2. 初学者 | 一文读懂命名实体识别
  3. python生成报告_python生成测试报告
  4. m3u8地址_「波波带你手动提取网页视频」04讲 Network和Elements提取m3u8链接
  5. Android 解决导入多个module时jar包冲突
  6. 【转】通过第三方工具体验Microsoft Graph
  7. 面试官 | count(1)、count(*) 、count(列名) 有什么区别?
  8. 路径获取文件名通用方法
  9. 【script】python中的函数式编程
  10. 【汉化】DevExpress插件中RichEdit控件的自定义汉化方法
  11. python学习笔记——多线程编程
  12. SystemVerilog搭建测试平台---第一章:验证导论
  13. python按内容分割txt文件_python 读txt文件,按‘,’分割每行数据操作
  14. 悉尼大学BUSS6002Assignment1课业解析
  15. 一篇文章带你认识数学建模中的数据拟合
  16. 苹果微信更新不了最新版本_微信登录不了,微信提示版本过低,请升级最新版本的解决办法...
  17. android版会说话的汤姆猫游戏源码
  18. 新媒体运营之如何低成本,有效地进行企业公众号拉新,获取10万+潜在用户? 黎想
  19. matlab 坐标移动,如何移动坐标轴到指定的位置
  20. GFP:新一代多业务传输技术(转)

热门文章

  1. android log抓取方法,Android系统之Android抓取各种log的方法
  2. 高中计算机教学心得,高中信息技术新课改教学学习心得.doc
  3. ⚔疯狂输出⚔ Java中的继承。
  4. R语言—豆瓣搜索电影
  5. arch系列安装腾讯会议linux版本
  6. 项目经理年终总结报告模板
  7. 【卡尔曼滤波器-Python】The g-h filter white white noise(白噪声)
  8. ssl证书的注册与nginx的配置
  9. 【java】dispose()方法与setVisible()方法
  10. 为什么要最大化后验概率