`
Cesar28
  • 浏览: 18965 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jersey 写restful接口时QueryParam ,FormParam 等的区别

 
阅读更多
今天用jersey写接口,发现有一个post方法中没有得到参数,查了半天发现自己一不小心将@formparam写成了@queryparam,真是一个悲伤的故事。在这里把几个参数类型整理了一下放出来。

1.
@PathParam
使用@PathParam可以获取URI中指定规则的参数,举个例子:
类中@Path("/user")
@GET
@Path("{username"})
@Produces(MediaType.APPLICATION_JSON)
public User getUser(@PathParam("username") String userName) {
    ...
}
当浏览器请求http://localhost/user/jack时,userName值为jack。
注意,这里的username并不是说Key是username, value是jack而是说/usr/后面跟着的东西就是username,这里username只是个变量


2.
@QueryParam
@QueryParam用于获取GET请求中的查询参数,如:
@GET
@Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name,
                    @QueryParam("age") int age) {
    ...
}
当浏览器请求http://host:port/user?name=rose&age=25时,name值为rose,age值为25。如果需要为参数设置默认值,可以使用

3.
@DefaultValue,如:
@GET
@Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name,
                    @DefaultValue("26") @QueryParam("age") int age) {
    ...
}
当浏览器请求http://host:port/user?name=rose时,name值为rose,age值为26。

4.
@FormParam
@FormParam,顾名思义,从POST请求的表单参数中获取数据。如:
@POST
@Consumes("application/x-www-form-urlencoded")
publicvoid post(@FormParam("name") String name) {
    // Store the message
}
相信使用过html进行post提交的人对表单一定不陌生,可以想象成这就是在模拟html中表单的请求。
5.
使用Map
在一个大型的server中,因为参数的多变,参数结构的调整都会因为以上几种方式而遇到问题,这时可以考虑使用@Context 注释,并获取UriInfo实例,如下:
@GET
public String get(@Context UriInfo ui) {
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
    MultivaluedMap<String, String> pathParams = ui.getPathParameters();
}
我觉得,可以认为map是上面几种情况的超集,因为它能够替代以上任意一种。map就是context
同样还可以通过@Context 注释获取ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等,如下:

@Path("/")
publicclass Resource {

    @Context
    HttpServletRequest req;

    @Context
    ServletConfig servletConfig;

    @Context
    ServletContext servletContext;

    @GET
    public String get(@Context HttpHeaders hh) {
        MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
        Map<String, Cookie> pathParams = hh.getCookies();
    }
}
分享到:
评论

相关推荐

    基于restful框架jersey

    这段代码展示了如何使用Jersey定义一个RESTful接口。其中: - `@POST` 表示该方法处理HTTP POST请求。 - `@Path("getPage")` 定义了访问该资源的路径。 - `@Consumes(MediaType.APPLICATION_JSON)` 和 `@Produces...

    RESTful Web 服务 Jersey使用

    6. 注解驱动:Jersey使用Java注解(如`@Path`, `@PathParam`, `@QueryParam`, `@HeaderParam`, `@FormParam`等)来简化配置,使得代码更简洁易读。 7. 过滤器和拦截器(Filters and Interceptors):Jersey提供过滤...

    Jersey实例

    1. 参数绑定:通过注解接收请求参数,如`@PathParam`、`@QueryParam`、`@FormParam`等。 2. 路由分发:使用`@Path`注解的嵌套路由,实现复杂的URL结构。 3. 类型转换:Jersey自动处理JSON和XML的序列化与反序列化。 ...

    jersey 1.9 框架源码

    Jersey是Java世界中的一款流行的RESTful Web服务框架,它基于JSR 311(Java API for RESTful Web Services)标准实现。本资源提供的"jersey 1.9 框架源码"是该框架的一个较早版本,对于学习和理解RESTful服务的实现...

    jersey-lib

    3. **请求和响应处理**:使用`@QueryParam`、`@PathParam`、`@FormParam`等注解来获取请求参数,同时,可以通过`Response`对象来构造并返回响应,包括状态码、头部信息和实体内容。 4. **内容协商**:Jersey允许...

    Jersey最新

    2. **数据绑定**:利用@XmlRootElement、@FormParam、@QueryParam等注解,可以自动将HTTP请求的数据与Java对象进行绑定和反绑定。 3. **过滤器和拦截器**:使用@Provider和@Priority注解,可以定义自定义的过滤器和...

    jersey

    3. **Jersey注解**:学习和使用Jersey提供的注解,如`@PathParam`、`@QueryParam`、`@FormParam`和`@HeaderParam`,以从请求中获取参数。 4. **实体处理**:使用`@XmlRootElement`和`@XmlElement`等JAXB注解处理XML...

    JAX-RS方式的RESTful Web Service开发

    在实际应用中,我们需要一个JAX-RS实现库,如Jersey或Resteasy,它们提供运行时环境来处理请求和响应。例如,使用Jersey,我们可以这样配置Web服务: ```xml &lt;!-- 在web.xml中配置Jersey --&gt; &lt;servlet-name&gt;...

    Jersey关于搭建Rest服务的案例

    可以使用`@PathParam`、`@QueryParam`、`@FormParam`、`@HeaderParam`等注解来获取请求参数,同时通过`@Context`注入`HttpServletRequest`和`HttpServletResponse`以获取更多请求信息或自定义响应。 此外,Jersey还...

    Jersey框架Getting Started

    Jersey 提供了一系列注解来增强REST服务的功能,例如`@PathParam`用于从URL路径中提取参数,`@QueryParam`用于从查询字符串中获取参数,`@HeaderParam`用于处理HTTP头信息,`@FormParam`用于表单数据,以及`@...

    jersey 代码例子

    - 注解方法参数:通过`@PathParam`、`@QueryParam`、`@FormParam`等注解获取请求中的参数。 - 返回响应:可以是任何Java对象,Jersey会自动将其转换为合适的格式返回给客户端。 例如,创建一个返回“Hello, World!...

    jersey-example

    - **高级注解**:如 `@PathParam`、`@QueryParam`、`@FormParam`、`@HeaderParam` 等,用于从请求中获取参数。 - **安全与认证**:结合 OAuth2、JWT 或其他机制实现身份验证和授权。 - **服务版本控制**:通过 URL ...

    使用Jersey 2.x的RESTFul Web服务(第一部分)

    5. **资源模型和数据转换**:讲解如何使用`@PathParam`、`@QueryParam`、`@FormParam`等注解获取请求参数,并使用`@Produces`和`@Consumes`指定响应和请求的媒体类型,如JSON或XML。 6. **测试REST服务**:介绍如何...

    samplerest:使用Jersey的示例REST应用程序

    4. **处理参数**:使用`@PathParam`, `@QueryParam`, `@FormParam`, `@HeaderParam`, `@CookieParam`等注解,可以从请求中获取参数。例如,`@PathParam("id")`可以从URL路径中获取参数。 5. **异常处理**:可以...

    超轻量RESTful框架—SlwRest(Super Lightweight)客户端及服务端Demo代码

    参数获取支持 @FormParam, @PathParam, @QueryParam, @HeaderParam等 内容支持常用的JSON, XML, TEXT 能够方便地实现Java复杂对象, List, Map对象与JSON/XML的互转换 支持多文件、多参数上传,支持文件下

    Jersey:第一次尝试使用 Jersey

    了解了基础后,可以深入学习 JAX-RS 规范中的其他注解,如 `@PathParam`、`@QueryParam`、`@HeaderParam`、`@FormParam`,它们分别用于从 URI 路径、查询参数、HTTP 头部和表单数据中获取参数。同时,`@Context` ...

    Java webService服务端封装

    - **处理HTTP请求**:在资源类的方法中,可以使用`@PathParam`, `@QueryParam`, `@FormParam`等注解获取请求参数。 - **数据序列化与反序列化**:JAX-RS支持多种数据格式如JSON和XML,可以通过`@Produces`和`@...

    phonecat-parent:使用 JAX RS - Jersey 2.x 和 Spring 4.x 的 PhoneCat App API

    在JAX-RS中,可以通过注解如`@PathParam`、`@QueryParam`、`@FormParam`等自动将HTTP请求参数绑定到服务方法的参数上。同样,响应结果也可以自动转换为JSON或XML格式,这在PhoneCat中可能是通过Jackson或Gson库来...

    Messenger:Web消息传递系统后端

    通过`@PathParam`、`@QueryParam`和`@FormParam`注解接收URL路径参数、查询参数和表单数据。 6. **错误处理与异常管理** 实现自定义的异常处理器,使用`@Provider`和`@ExceptionMapper`注解,处理可能出现的HTTP...

    REST-WebAPI:REST-WebAPI

    这时可以利用JAX-RS的注解,如`@PathParam`、`@QueryParam`、`@FormParam`等,以及支持JSON或XML序列化的库,如Jackson或Gson。 此外,REST-WebAPI项目中的“演示”部分可能包含了如何测试和使用这些API的示例。这...

Global site tag (gtag.js) - Google Analytics