【原创文章,转载请注明原文章地址,谢谢!】
在本节中,我们会针对前面两篇Jersey文章的资源,请求参数绑定等做一些补充说明。
@Context注入特殊资源
在SpringMVC中,让我们影响深刻的有一个标签是@Autowire。能够注入一些非常特殊的对象,比如ApplicationEventPublisher,在Web环境下能注入ServletContext等等,在SpringMVC中,还能在每一个Controller方法参数中注入HttpServletRequest,HttpSession等特殊对象,其实在Jersey中也可以实现,需要用到@Context注解。
获取UriInfo
/**
* 使用@Context获取请求上下文内容
*
* @param ui
* @return
*/
@GET
@Path("/formui")
public String formPojoParam(@Context UriInfo ui) {
MultivaluedMap<String, String> qps = ui.getQueryParameters();
MultivaluedMap<String, String> pps = ui.getPathParameters();
System.out.println(qps);
System.out.println(pps);
return "success";
}
在JAX-RS中,一个UriInfo对象封装了应用相关信息和本次请求相关信息。并在UriInfo中提供了一些有用的方法:
比如针对请求GET localhost:8082/webapi/param/formui?name=haha
//获取资源路径:param/formui
System.out.println(ui.getPath());
//获取完整请求路径:http://localhost:8082/webapi/param/formui
System.out.println(ui.getAbsolutePath());
//获取请求根路径:http://localhost:8082/webapi/
System.out.println(ui.getBaseUri());
//获取匹配请求的资源类[cn.wolfcode.jersey._04parameters.ParameterRest@73ea3756]
System.out.println(ui.getMatchedResources());
//获取尝试匹配的资源路径[param/formui, param]
System.out.println(ui.getMatchedURIs());
//获取完整请求URIhttp://localhost:8082/webapi/param/formui?name=haha
System.out.println(ui.getRequestUri());
//获取请求参数列表{name=[haha]},类型为MultivaluedMap<String, String>
System.out.println(ui.getQueryParameters());
//获取路径参数列表{}
System.out.println(ui.getPat