http请求中的参数

网友投稿 867 2022-05-30

http请求中的参数

本文以前端框架jquery.ajax和后端标准JAX-RS、SpringMVC为例,介绍如何在前后端通过http request消息传递参数。

http请求消息分为消息头header和消息体body。放在body中的数据只有一种,其余都是放在header中的不同位置。

HTTP请求可以文本显示,各参数以回车分割。

如:

一般根据参数在http中的位置的不同,置值和取值的方法也不一样。下面将分别介绍。

header

数据在header中,并单独占header的一个属性。header中除了HTTP标准字段,也可以自己添加非标准字段。

前端:

$.ajax({

url: "/getHeader",

type: "GET",

header: {

token: "11111"

}

});

后端:

JAX-RS

@GET

@Path("/getHeader")

public String getHeader(@HeaderParam(HttpHeaders.token) String token) {}

SpringMVC

@GET

@Path("/getHeader")

public String getHeader(@RequestHeader("token") String token) {}

扩展

HTTP头(Request)中的标准字段如下(摘自维基百科)

cookie

数据在header的cookie中,cookie是发送HTTP请求时客户端会自动附上的数据。

前端:

$.ajax({

url: "/getCookie",

type: "GET"

})

cookie中的数据

sessionId=415A4AC178C59DACE0B2C9CA727CDD84

后端:

JAX-RS

@GET

@Path("/getCookie")

public String getCookie(@CookieParam("sessionId") String sessionId) {}

SpringMVC

@GET

@Path("/getCookie")

public String getCookie(@CookieValue("sessionId") String sessionId) {}

path

数据在url中。

前端:

$.ajax({

url: "/getUserById/100/Ann",

type: "GET"

})

后端:

JAX-RS

@GET

@Path("/getUserById/{id}/{name}")

public String getUserInfoId(@PathParam("id") int id,

@PathParam("name") String name) {}

SpringMVC

@GET

@Path("/getUserById/{id}/{name}")

public String getUserInfoId(@PathVariable("id") int id,

@PathVariable("name") String name) {}

query

数据在url中,以?和&区隔。

前端:

$.ajax({

url: "/getUserByName?name=Ann",

type: "GET"

})

后端:

JAX-RS

@GET

@Path("/getUserByName")

public String getUserInfo(@DefaultValue("fei")@QueryParam("name") String name) {}

SpringMVC

@GET

@Path("/getUserByName")

public String getUserInfo(@RequestParam(value="name", required=false) String name) {}

matrix

数据在url中,以;区隔。

矩阵参数适用于特定路径元素,而查询参数作为整体应用于请求.当对多级资源和子资源进行复杂的REST风格查询时,这种情况就会发生:

http://example.com/res/categories;name=foo/objects;name=green/?page=1

前端:

$.ajax({

url: "/getMatrix;name=Ann;address=Shanghai",

type: "GET"

});

后端:

JAX-RS

@GET

@Path("/getMatrix")

public String getMatrix(@MatrixParam("name") String name,

http请求中的参数

@MatrixParam("address") String address) {}

SpringMVC

@GET

@Path("/getMatrix")

public String getMatrix(@MatrixVariable("name") String name,

@MatrixVariable("address") String address) {}

body

一个http请求只能有一个消息体(request body),因此该参数在一个请求中只有一个。

body中的数据支持多种格式,常用的有application/x-www-form-urlencoded、application/json 、application/xml等。

后端:

JAX-RS

若数据类型是form,用@FormParam 。

SpringMVC

若数据类型是form,用@RequestParam 。

若数据类型不是form,用@RequestBody 。

其他

获取上下文中的HttpServletRequest、HttpServletResponse等对象。

后端:

JAX-RS

用@Context注解。

public String demo(@Context HttpServletRequest httpServletRequest)

The object instances that it can inject are the following:

SecurityContext – Security context instance for the current HTTP request

Request – Used for setting precondition request processing

Application, Configuration, and Providers -> Provide access to the JAX-RS application, configuration, and providers instances

ResourceContext – Resource context class instances

ServletConfig – The ServletConfig instance instance

ServletContext – The ServletContext instance

HttpServletRequest – The HttpServletRequest instance for the current request

HttpServletResponse – The HttpServletResponse instance for the current request

HttpHeaders – Maintains the HTTP header keys and values

UriInfo – Query parameters and path variables from the URI called

开发者

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:专访Kohsuke Kawaguchi:如何依靠开源项目养活自己
下一篇:Scrum与OKR融合实践经验分享
相关文章