一、REST统一接口
REST通过统一的接口方式获取客户端资源,其中主要包括:GET、POST、DELETE、PUT方法。以下是GET方法和POST方法的实例:
/** * @QueryParam为主要通过键值对取参数值 * @param request * @param id * @param name * @param gender * @return */ @GET//以GET的方式进行接口调用 @Path("find")//接口路径 @Produces("applications/json") public Object publicMicroblog(@Context HttpServletRequest request, @QueryParam("id") @DefaultValue("") String id,//主要通过键值对这样取 @QueryParam("name") @DefaultValue("") String name, @QueryParam("gender") @DefaultValue("0") int gender){ User user = new User(); user.setName(name); user.setId(id); user.setGender(gender); System.out.println("GET=============="+user.getName()); return user; } @POST//以POST的方式进行接口构建 @Path("update")//接口路径 @Produces("application/json") public Object updateMicroblog(@Context HttpServletRequest request, @QueryParam("id") @DefaultValue("") String id, @QueryParam("name") @DefaultValue("") String name, @QueryParam("gender") @DefaultValue("0") int gender){ User user = new User(); user.setName(name); user.setId(id); user.setGender(gender); System.out.println("POST=================="+user.getName()); return user; }
二、资源定位
Jersey具有一定的参数格式获取参数数值。主要有:@QueryParam(主要通过键值对取参数值),@FormParam(以表单的方式获取参数),@PathParam(将参数作为接口路径的一部分进行组合),@BeanParam(自定义一个参数组合实例),@CookieParam(匹配cookie中的键值对),@Context(注解来获取上下文参数(ServletContext,ServletRequest,ServletResponse),获取请求头信息,获取请求处理信息)。实例如下:
@POST//以POST的方式进行接口构建 @Path("update")//接口路径 @Produces("application/json") public Object updateMicroblog(@Context HttpServletRequest request, @QueryParam("id") @DefaultValue("") String id, @QueryParam("name") @DefaultValue("") String name, @QueryParam("gender") @DefaultValue("0") int gender){ User user = new User(); user.setName(name); user.setId(id); user.setGender(gender); System.out.println("POST=================="+user.getName()); return user; } /** * @PathParam将参数作为接口路径的一部分进行组合 */ @Path("comment/{name}") @POST @Produces("application/json") public Object commentByName(@PathParam("name") String name, @QueryParam("id") String id,@QueryParam("gender") int gender){ User user = new User(); user.setName(name); user.setId(id); user.setGender(gender); System.out.println("@PathParam=================="+user.getName()); return user; } /** * @FormParam将以表单的形式传递参数 */ @Path("commentupdate") @POST @Produces("application/json") public Object updateComment(@FormParam("name") String name, @FormParam("id") String id,@FormParam("gender") int gender){ User user = new User(); user.setName(name); user.setId(id); user.setGender(gender); System.out.println("@FormParam=================="+user.getName()); return user; } /** * @BeanParam将自定义一个参数组合实例 */ @Path("savecomment") @POST @Produces("application/json") public Object saveComment(@BeanParam User user){ System.out.println("@BeanParam=================="+user.getName()); return user; } /** * @CookieParam匹配cookie中的键值对 */ @Path("findcomments") @POST @Produces("application/json") public LinkedList<User> findComments(@CookieParam("name") String name, @CookieParam("id") String id){ User user = new User(); user.setId(id); user.setName(name); System.out.println("@CookieParam=================="+user.getName()); LinkedList<User> list = new LinkedList<User>(); list.add(user); return list; } /** * @Context注解来获取上下文参数(ServletContext,ServletRequest,ServletResponse),获取请求头信息,获取请求处理信息, */ @Path("savemicroblog") @POST @Produces("application/json") public void saveMicroblog(@Context HttpServletRequest request, @Context HttpHeaders headers,@Context ServletContext ctx, @Context Request request2){ String name = (String) request.getAttribute("name"); System.out.println("@Context========httpservletrequest=========="+name); System.out.println("@Context========headers=========="+headers.getHeaderString("token")); System.out.println("@Context========servletcontext=========="+ctx); System.out.println("@Context========request=========="+request2); }
三、传输格式
在传入的参数中可以包含基本数据类型、文件类型、InputStream类型、Reader类型和JSON类型等。实例如下:
/** * 传入文件类型 * @throws IOException */ @Path("uploadfile") @POST public void uploadfile(File file) throws IOException{ try(BufferedReader br = new BufferedReader(new FileReader(file))){ String s; do { s = br.readLine(); System.out.println("========file=========="+s); } while (s != null); } } /** * 参数为InputStream类型 * @throws IOException */ @Path("input") @POST public void inputfile(InputStream inputStream) throws IOException{ try(BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))){ String s; do { s = br.readLine(); System.out.println("========inputStream=========="+s); } while (s != null); } } /** * 参数为reader类型 * @throws IOException */ @Path("reader") @POST public void readerfile(Reader reader) throws IOException{ try(BufferedReader br = new BufferedReader(reader)){ String s; do { s = br.readLine(); System.out.println("========inputStream=========="+s); } while (s != null); } }
四、内容协商
在服务端设计接口时,需要与客户端协商接收数据的方式和响应数据的方式。接收数据的方式以@Consumes注解进行协商,响应数据的格式以注解@Produces进行协商。实例如下:
/** * @Consumes将参数以一定的格式进行接收 * @Produces将结果以一定的格式进行输出 */ @MyBindingFilter @Path("json") @POST @Consumes("application/json") @Produces("application/json") public User findMicroblogByName(User user){ User user1 = new User(); user1.setName(user.getName()); user1.setOrgLongName(user.getOrgLongName()); System.out.println("===========json========="+user.getName()); return user; }