`

Restful解析posf方式传参

阅读更多
结论:

restful风格的接口不支持多个参数

注:本文指的是通过json序列化参数的情况
1. 前置

一个定义用来测试的MyParam类

public class MyParam {
    private String str;
    private Integer integer;
    // 省略 getter和setter……
    }


我在做测试的是用了Chrome的插件Advanced REST client,可以模拟浏览器发送各种请求,并自定义header和body。
测试的时候需要使用post方式,并在http请求header中加入

accept: application/json
content-type: application/json


然后在htpp请求的Body中,输入json格式的参数,如{"str":"bb","integer":3}。

以下是几种多参数接口的形式,以及输入参数,以及解析结果。

2. 第一种:两个String参数

@POST
@Path("demo")
public Result function(String param1, String param2);


传入的参数:
{"param1":"bb","param2":"cc"} 
解析出来的参数:

param1: "{"param1":"bb","param2":"cc"}"
param2: ""


这样的风格,传输过来的参数,读取的时候会读取request body中的inputStream,然后两个参数循环解析,解析完第一个参数的时候,会关闭inputStream,第二个参数再去读取inputStream的时候,读取到的就是空。
这样的话,传入的参数全部会赋值给第一个String对象,而第二个String解析出来后就是空字符串。

3. 第二种:一个对象参数,一个String参数

对于 第一个参数是封装对象的情况,能解析出来第一个对象,而第二个参数也是拿不到。
这种情况下不会报错,只是解析第一个对象的时候没有问题,解析第二个String拿到的就是空字符串。

@POST
@Path("demo")
@Consumes({MediaType.JSON})
public Result function(MyParam myParam, String param);


传入的参数:
{"str":"helo","integer":2},"string":"test"

解析出来的参数:

param1: 能正确解析对象myParam,其两个属性能正确赋值。
param2: ""


4. 第三种:一个String参数,一个对象参数

如果把两个参数的位置交换,则会把传入的参数全部解析给第一个String,而解析第二个对象的时候,由于拿到的数据是空,所以会报错。如下:


@POST
@Path("demo")
public Result function(String param, MyParam myParam);


传入的参数:
{"str":"helo","integer":2},"string":"test" 

解析出来的参数:

param1: "{"str":"helo","integer":2},"string":"test""
param2: 会报错


5.解决方法

要解决传入多个参数的问题,有几个思路:
1. 封装对象,把要传的多个参数封装成一个对象传入
2. 在访问路径中嵌入变量,使用@PathVariable注解,在请求路径中写 “/demo/{1}/{2}”,然后在请求路径中相应的位置替换为要穿的参数即可,这种也只适用于包装类,如String。
3. 改变请求的content type,使用content-type: application/x-www-form-urlencoded,这种使用form表单提交的形式,可以传入两个参数,要结合使用@FormParam注解

6.关于使用form形式传入参数

接口的定义形式要修改

@POST
@Path("demo")
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
public Result function(@FormParam(value="string1")String string1, @FormParam(value="string2")String string2);


请求时,header参数要修改

accept: application/json
content-type: application/x-www-form-urlencoded


请求Body中使用form形式

string1=wo&string2=kan


然后就可以正确解析到两个参数的值
解析出来的参数:

string1: wo
string2: kan
分享到:
评论
1 楼 wanglc7 2017-09-29  
看不懂  

相关推荐

    浅谈java调用Restful API接口的方式

    "Java调用Restful API接口的方式" Java调用Restful API接口是Java开发中非常重要的一部分,了解Java调用Restful API接口的方式可以帮助开发者更好地理解和使用相关技术。本文将详细介绍Java调用Restful API接口的...

    Python restful框架接口开发实现

    Python RESTful框架接口开发是构建Web服务的一种常见方式,它基于HTTP协议,使用简洁明了的URI(统一资源标识符)来表示资源,并通过HTTP动词(GET, POST, PUT, DELETE)来操作这些资源。RESTful接口设计的核心原则...

    restful zip请求直接解析和下载

    restful zip请求直接解析和下载restful zip请求直接解析和下载restful zip请求直接解析和下载restful zip请求直接解析和下载restful zip请求直接解析和下载restful zip请求直接解析和下载restful zip请求直接解析和...

    HttpClient访问后台服务的Restful(各种方式访问)

    使用HttpClient4.3版本,使用Springmvc的restful方式访问后台的服务

    restful与js方式文件上传下载1

    在IT行业中,RESTful是一种广泛采用的Web服务设计风格,用于构建可伸缩、易于理解和维护的API。这种风格基于HTTP协议,使得客户端和服务器之间的交互变得更加简单直接。本篇文章将深入探讨RESTful API在文件上传和...

    C#服务端RestFul Service-经验案例.doc

    该经验案例主要讲解了如何使用RestFul数据访问方式将装备软件与MES系统集成,并实现系统集成和联合。 RESTful简介 REST(Representational State Transfer)是一种描述互联系统架构风格的名词,简单地来说REST是一...

    SOAP webserivce 和 RESTful webservice 对比及区别

    SOAP Web服务和RESTful Web服务是两种常见的Web服务交互方式,它们在设计理念、协议复杂度、数据格式和操作方式等方面存在显著的区别。 首先,SOAP(简单对象访问协议)是一种基于XML的协议,它允许不同系统之间的...

    postman基于restful传递多个参数至thingworx方法

    Postman基于RESTful传递多个参数至ThingWorx方法 ThingWorx作为一款Industrial IoT平台,提供了强大的数据处理和分析能力,而Postman则是一款功能强大的API测试工具,通过Postman,我们可以轻松地测试和验证...

    restful接口文档模板

    ### RESTful接口文档模板知识点解析 #### 一、RESTful接口概述 REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,可以使用XML或者JSON格式传输数据,一般用于...

    POST一个JSON格式的数据给Restful服务实例详解

    以上就是关于如何向RESTful服务实例发送JSON格式数据的详细解释,每一种平台或语言都有其特有的实现方式,但其核心概念是相同的,都是创建一个HTTP POST请求,并以application/json格式发送数据。在实际开发中,我们...

    解析Restful Web Service架构

    ### 解析Restful Web Service架构 #### 一、HTTP协议基础 HTTP(HyperText Transfer Protocol)是一种基于文档的协议,用于客户端与服务器之间的通信。在HTTP通信过程中,客户端通过发送带有特定请求方法(如GET、...

    C# 一个简单的 Restful 服务端和 Restful 客户端 Demo

    本示例是关于如何使用C#语言创建一个简单的RESTful服务端以及对应的RESTful客户端。以下是相关知识点的详细说明: 1. **RESTful原则**:REST(Representational State Transfer)的核心思想是资源(Resource)和...

    谷歌浏览器restful请求插件

    RESTful API设计简洁、直观,易于理解和使用,是现代Web服务的主流实现方式。 **前端与后端交互** 在Web应用中,前端负责用户界面的展示和交互,而后端则处理业务逻辑和数据存储。RESTful请求插件扮演着两者之间的...

    httpclient和RestfuL风格上传下载文件

    RESTful服务端通常会提供一个接收文件的POST接口,该接口需要解析multipart请求并保存文件到服务器。 **文件下载** 文件下载通常通过GET请求完成,HTTPClient可以通过`HttpGet`类创建请求。服务端提供一个URL,...

    delphi7使用IXMLHTTPRequest实现RESTful的访问及返回json数据的解析

    本主题聚焦于如何在Delphi 7中使用IXMLHTTPRequest组件来实现RESTful API的访问,并解析返回的JSON数据。同时,还涉及到HMACSHA1加密算法在消息段推送中的应用。 首先,IXMLHTTPRequest是微软提供的一个接口,它...

    Java Restful Web 源代码,Java Restful Web 源代码

    Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web...

    c# 服务端调用RestFul Service的方法

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于约束条件和架构原则的运用。REST 架构风格的核心概念是“资源”(Resource),并通过 URL 来定位这些资源。RESTful API 使用 ...

    restful 接口开发规范(RESTfulAPIdesignguide)

    这些规范不仅有助于接口的维护,也方便了第三方的集成,因为它们提供了一种通用的方式来与Web服务进行交互。 在设计RESTful接口时,还应考虑安全性、性能以及扩展性等因素。使用HTTPS来确保数据传输的安全,采用...

    解析Restful Web Service 架构

    ### 解析Restful Web Service架构 #### 一、HTTP协议基础 HTTP(HyperText Transfer Protocol)是一种基于文档的协议,用于客户端与服务器之间的通信。它规定了一套标准的请求和响应格式,使得不同系统间的交互...

    用于restful方式的支持库,方便易用,dll 支持4.0、3.5、net4-client、net35-client

    在.NET开发环境中,有许多库可以支持RESTful服务的开发,其中就包括了"用于restful方式的支持库"。 这个库的主要特点是方便易用,它提供了对多种.NET框架版本的支持,包括.NET Framework 4.0、3.5,以及轻量级的...

Global site tag (gtag.js) - Google Analytics