RESTful Web Services -- JAX-RS中的注解

RESTful Web Services -- JAX-RS中的注解

1)javax.ws.rs包下的注解:

    javax.ws.rs.GET、javax.ws.rs.Post、javax.ws.rs.Consumes、javax.ws.rs.Produces、javax.ws.rs.Path

        @GET    表示(被@GET注解修饰的)方法将处理(响应)来自HTTP的GET请求
        @POST
        @PUT
        @DELETE
        @HEAD
    
        @Consumes:表示一个资源类或方法可以接受的MIME类型。
            说明:MIME类型可以有多个。
            举例:@Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM, MediaType.TEXT_PLAIN})
            注意:MediaType的类型为javax.ws.rs.core.MediaType
            
        @Produces:表示一个资源类或方法可以返回的MIME类型。
            说明:可以同时返回多种类型,但具体生成结果时使用哪种格式取决于ContentType。CXF默认返回的是JSON字符串。
    
        @Path:用来标注资源类或方法的相对路径
            说明:value值可以包含文本字符、变量或具有定制正则表达式的变量。
            举例:@Path("/helloworld/{username}") 
            
    javax.ws.rs.PathParam、javax.ws.rs.QueryParam、javax.ws.rs.FormParam、javax.ws.rs.BeanParam、javax.ws.rs.core.Context
            
        @PathParam:标注方法的参数来自于请求的URL路径,参数的名称和@Path注解中定义的变量名对应
            举例:
                接口URL:/helloworld/xiaoning
                
                @POST
                @Path("/helloworld/{username}")
                public String hello((@PathParam("username")String username);
        
        @QueryParam:标注方法的参数来自于请求的URL的查询参数,即用来获取URL中的查询参数。
            举例:
                接口URL:/downloadExcel?fileId=77&username=xiaoning
                
                @GET
                @Path("/downloadExcel")
                @Consumes({"application/octet-stream"})
                @Produces("application/vnd.ms-excel")
                public Response downloadExcel(@QueryParam("fileId")Integer fileId ,@QueryParam("username")String username);
        
        @FormParam:用来获取POST请求中的表单参数,请求的MIME类型为"application/x-www-form-urlencoded"
            举例:
                接口URL:/getAccountInfo
                
                @POST
                @Path("/getAccountInfo")
                @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
                @Produces(MediaType.APPLICATION_JSON)
                public String getAccountInfo((@FormParam("username")String username);
        
        @BeanParam:自定义参数组合,BeanParam使得REST方法可以使用简洁的参数形式完成复杂的接口设计。
            说明:
                1>@BeanParam注解修饰的类是用来封装请求中的多个参数
                2>通过在@BeanParam注解修饰的类的属性上添加@FormParam、@QueryParam、@PathParam等注解来获取请求参数的值
            举例:
                接口URL:/getUserInfo

                @POST
                @Path("/getUserInfo")
                @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
                @Produces(MediaType.APPLICATION_JSON)
                public String getUserInfo(@BeanParam ReqGetUserInfoDTO req); 
    
                public class ReqGetAccountInfoByIdDTO {
                    @FormParam("username")
                    private String username;
                    
                    @FormParam("password")
                    private String password;
                }

        @Context:用来获取上下文参数
            举例:
                接口URL:/uploadFile
            
                import javax.servlet.http.HttpServletRequest;
                import javax.ws.rs.core.UriInfo;
                import javax.ws.rs.core.HttpHeaders;
                
                @POST
                @Path("/uploadFile")
                @Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM, MediaType.TEXT_PLAIN})
                @Produces(MediaType.APPLICATION_JSON)
                public String uploadFile(@Context final HttpServletRequest servletRequest, @Context final UriInfo uriInfo, @Context final HttpHeaders httpHeaders);
                        
                        
                接口URL:/exportPlanData 
                
                @GET
                @Path("/exportPlanData")
                public Response exportPlanData(@BeanParam ReqGetPlanRtDataDTO reqGetPlanRtDataDTO, @Context HttpServletResponse response);
                
                // 实现以流的方式导出数据:
                //    SXSSFWorkbook wb = new SXSSFWorkbook();
                //  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                //  String fileName = format.format(new Date()) + "_计划报表.xlsx";
                //  ServletOutputStream outputStream = response.getOutputStream();
                //  wb.write(outputStream);
                //  response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                //  response.setContentType("application/vnd.ms-excel");
                //  outputStream.close();
                //  return Response.status(Response.Status.OK).entity(null).build();

                
                
        @HeaderParam:用来获取HTTP请求的头信息
        
        @CookieParam:用来获取HTTP请求的Cookie信息

        @MatrixParam:用来从路径段中获取参数信息

        @PathVariable:是用来获得请求url中的动态参数
    
    说明:多个注解同时存在时,按照优先级来确定从哪里获取参数的值。    

    
    例子:
    
        前端REST接口测试request:
            company        "google"
            userList    {name:"jack",age:17}
            userList    {name:"jack2",age:18}
            userList    {name:"jack3",age:19}

            
        后端接口:
            @POST
            @Path("/getUserInfo")
            public Result getUserInfo(@BeanParam UserInfo req);
            

            import java.util.List;
            import javax.ws.rs.FormParam;
            
            public class UserInfo {

                @FormParam("company")
                private String company;

                @FormParam("userList")
                private List<User> userList;

                // setter and getter
            }

            public class User {

                private String name;
                private Long age;
                
                public User() {
                }
                
                /**
                 * 需要一个构造方法来实现json串到javaBean的转换,该构造方法的参数是一个字符串。
                 * @param paramStr
                 */
                public User(String paramStr) {
                    // 将json串转换为javaBean
                    JSONObject jsonObject = JSONObject.fromObject(paramStr);
                    this.name = jsonObject.getString("name");
                    this.age = Long.parseLong(jsonObject.getString("age"));
                }
                // setter and getter
            }

            

2)CFX中的注解:

    org.apache.cxf.jaxrs.ext.multipart.Multipart
    
        @Multipart:Annotate a JAX-RS function parameter to receive data from a multipart 'part'
        说明:
            import org.apache.cxf.jaxrs.ext.multipart.Attachment;
            
            @Consumes(MediaType.MULTIPART_FORM_DATA)
            public String uploadExcel(@Multipart(value="file")Attachment uploadFile, @Multipart(value="userId")Integer userId);
                
    
    
        
    


--------------------- 
作者:a__17 
来源:CSDN 
原文:https://blog.csdn.net/wodewutai17quiet/article/details/73506142 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值