欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Jersey Restful接口如何獲取參數(shù)的問題

 更新時間:2021年06月07日 14:52:27   作者:456又  
這篇文章主要介紹了Jersey Restful接口如何獲取參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

緣起

工作時使用java開發(fā)服務(wù)器后臺,用Jersey寫Restful接口,發(fā)現(xiàn)有一個Post方法始終獲取不到參數(shù),查了半天,發(fā)現(xiàn)時獲取參數(shù)的注釋不太對,將@formparam寫成了@queryparam,發(fā)現(xiàn)了這個改過來就好了,順便整理了一下不同參數(shù)的作用。

簡述

獲取URI的參數(shù)

獲取Get請求的參數(shù)

獲取Post類型的參數(shù)

添加參數(shù)默認值

獲取Map參數(shù)

1.@PathParam

使用該注釋獲取參數(shù)時可以獲取URI中制定規(guī)則的參數(shù)

例如:

//該類的路徑為/user
@GET
@Path("{username"})
@Produces(MediaType.APPLICATION_JSON)
public User getUser(@PathParam("username") String userName) {
 ...}

當(dāng)瀏覽器請求

http://localhost:8080/user/jack

時,username的值就是jack。請注意,這里的username并不是說key的值就是username,value是jack,而是說/user/后面就跟著username,這里的username只是一個變量。

2.@QueryParam

該參數(shù)用于獲取Get請求中的查詢參數(shù),他和上一個的區(qū)別是它是通過URI中的?符號來實現(xiàn)的。

比如:

@GET
@Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name, @QueryParam("age") int age) { 
...}

當(dāng)url的請求是

http://localhost:8080/user?name=cesar&age=21

時,此時函數(shù)獲取的參數(shù)就是name=cesar而age=21;

3.@FormPara

顧名思義,是從Post請求的表單中獲取數(shù)據(jù)。

@POST
@Consumes("application/x-www-form-urlencoded")
publicvoid post(@FormParam("name") String name) { 
// Store the message
}

4.默認參數(shù)值DefaultValue

當(dāng)你希望在函數(shù)獲取參數(shù)時參數(shù)有一個默認值,那么就可以使用該注釋,它的使用方法如下

@GET
@Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name, @DefaultValue("26") @QueryParam("age") int age) { 
...}

那么當(dāng)請求age參數(shù)時如果age沒有賦值,就會默認為26.

5.使用Map的參數(shù)@Context

在一個大型的server中,由于參數(shù)的多變,參數(shù)結(jié)構(gòu)的調(diào)整很容易遇到問題,這時候就可以考慮使用@Context來進行注釋了。例子如下:

@GET
public String get(@Context UriInfo ui) { 
 MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); 
MultivaluedMap<String, String> pathParams = ui.getPathParameters();
}

從例子中我們可以看出,其實Context就是其他幾個參數(shù)的集合而已,只要熟練掌握了這幾種參數(shù)以及他們代表的意義,你就可以熟練的操作Jersey了!

Restful接口傳入多參數(shù)的問題及解決方案

結(jié)論:

restful風(fēng)格的接口不支持多個參數(shù)

注:本文指的是通過json序列化參數(shù)的情況

1. 前置

一個定義用來測試的MyParam類

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

我在做測試的是用了Chrome的插件Advanced REST client,可以模擬瀏覽器發(fā)送各種請求,并自定義header和body。

測試的時候需要使用post方式,并在http請求header中加入

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

然后在htpp請求的Body中,輸入json格式的參數(shù),如{"str":"bb","integer":3}。

以下是幾種多參數(shù)接口的形式,以及輸入?yún)?shù),以及解析結(jié)果。

2. 第一種:兩個String參數(shù)

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

傳入的參數(shù):

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

解析出來的參數(shù):

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

param2: ""

這樣的風(fēng)格,傳輸過來的參數(shù),讀取的時候會讀取request body中的inputStream,然后兩個參數(shù)循環(huán)解析,解析完第一個參數(shù)的時候,會關(guān)閉inputStream,第二個參數(shù)再去讀取inputStream的時候,讀取到的就是空。

這樣的話,傳入的參數(shù)全部會賦值給第一個String對象,而第二個String解析出來后就是空字符串。

3. 第二種:一個對象參數(shù),一個String參數(shù)

對于 第一個參數(shù)是封裝對象的情況,能解析出來第一個對象,而第二個參數(shù)也是拿不到。

這種情況下不會報錯,只是解析第一個對象的時候沒有問題,解析第二個String拿到的就是空字符串。

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

傳入的參數(shù):

{"str":"helo","integer":2},"string":"test"

解析出來的參數(shù):

param1: 能正確解析對象myParam,其兩個屬性能正確賦值。

param2: ""

4. 第三種:一個String參數(shù),一個對象參數(shù)

如果把兩個參數(shù)的位置交換,則會把傳入的參數(shù)全部解析給第一個String,而解析第二個對象的時候,由于拿到的數(shù)據(jù)是空,所以會報錯。如下:

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

傳入的參數(shù):

{"str":"helo","integer":2},"string":"test"

解析出來的參數(shù):

param1: "{"str":"helo","integer":2},"string":"test""

param2: 會報錯

5.解決方法

要解決傳入多個參數(shù)的問題,有幾個思路:

1. 封裝對象,把要傳的多個參數(shù)封裝成一個對象傳入

2. 在訪問路徑中嵌入變量,使用@PathVariable注解,在請求路徑中寫 “/demo/{1}/{2}”,然后在請求路徑中相應(yīng)的位置替換為要穿的參數(shù)即可,這種也只適用于包裝類,如String。

3. 改變請求的content type,使用content-type: application/x-www-form-urlencoded,這種使用form表單提交的形式,可以傳入兩個參數(shù),要結(jié)合使用@FormParam注解

6.關(guān)于使用form形式傳入?yún)?shù)

接口的定義形式要修改

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

請求時,header參數(shù)要修改

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

請求Body中使用form形式

string1=wo&string2=kan

然后就可以正確解析到兩個參數(shù)的值

解析出來的參數(shù):

string1: wo

string2: kan

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring AOP的使用詳解

    Spring AOP的使用詳解

    這篇文章主要介紹了Spring AOP的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于SpringBoot的Docker部署實踐

    基于SpringBoot的Docker部署實踐

    在云計算和微服務(wù)架構(gòu)日益普及的今天,Docker已成為一種主流的應(yīng)用部署方式,本文將詳細介紹如何將基于Spring Boot的項目部署到Docker容器中,需要的朋友可以參考下
    2023-07-07
  • 使用StringRedisTemplate操作Redis方法詳解

    使用StringRedisTemplate操作Redis方法詳解

    這篇文章主要為大家介紹了使用StringRedisTemplate操作Redis方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • MyBatis關(guān)聯(lián)查詢的實現(xiàn)

    MyBatis關(guān)聯(lián)查詢的實現(xiàn)

    MyBatis可以通過定義多個表的關(guān)聯(lián)關(guān)系,實現(xiàn)多表查詢,本文主要介紹了MyBatis關(guān)聯(lián)查詢的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • IDEA不編譯除了.java之外的文件的解決辦法(推薦)

    IDEA不編譯除了.java之外的文件的解決辦法(推薦)

    這篇文章主要介紹了IDEA不編譯除了.java之外的文件的解決辦法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java中mkdir()和mkdirs()的區(qū)別及說明

    Java中mkdir()和mkdirs()的區(qū)別及說明

    這篇文章主要介紹了Java中mkdir()和mkdirs()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • struts2+spring+ibatis框架整合實現(xiàn)增刪改查

    struts2+spring+ibatis框架整合實現(xiàn)增刪改查

    這篇文章主要為大家詳細介紹了struts2+spring+ibatis框架整合實現(xiàn)增刪改查操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java?中導(dǎo)入excel時使用?trim()?無法去除空格的問題解決方案

    Java?中導(dǎo)入excel時使用?trim()?無法去除空格的問題解決方案

    這篇文章主要介紹了Java中導(dǎo)入excel時使用trim()無法去除空格的解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Quartz高可用定時任務(wù)的快速上手指南

    Quartz高可用定時任務(wù)的快速上手指南

    Quartz的分布式策略就是一種以數(shù)據(jù)庫作為邊界資源的并發(fā)策略,每個節(jié)點都遵守相同的操作規(guī)范,使得對數(shù)據(jù)庫的操作可以串行執(zhí)行,而不同名稱的調(diào)度器又可以互不影響的并行運行,下面這篇文章主要介紹了Quartz高可用定時任務(wù)快速上手的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 使用SpringBoot項目導(dǎo)入openfeign版本的問題

    使用SpringBoot項目導(dǎo)入openfeign版本的問題

    這篇文章主要介紹了使用SpringBoot項目導(dǎo)入openfeign版本的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論