jQuery火箭图标返回顶部代码

后端接口常用的注解

不知不觉已经快入职一个星期了,从学校到公司的跨度也在慢慢适应,进了公司才发现,一方面自己学的技术太少了,另一方面就是没有开发经验。来到公司的第一天就拿到了一套源码,反反复复看了那么久,终于摸索七七八八了。因为我以前用注解比较少,所以这次就讲讲我后端接口类中看到的几个高频注解(接口测试工具postman):

@RequestMapping
@RestController
@ResponseBody
@Controller
@ResquestParam
@PathVariable

让我们一起看看这几个注解分别是什么吧。

一 、@RequestMapping

在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置的映射作用一致。通俗来讲,就是postman的访问路径的入口就是@RequestMapping来决定的。

(转载于:https://blog.csdn.net/renanrenan/article/details/84654362)

1 <servlet>
2     <servlet-name>servletName</servlet-name>
3     <servlet-class>ServletClass</servlet-class>
4 </servlet>
5 <servlet-mapping>
6     <servlet-name>servletName</servlet-name>
7     <url-pattern>url</url-pattern>
8 </servlet-mapping>

RequestMapping注解有六个属性,下面我们把她分成三类进行说明(转载于:https://www.cnblogs.com/holly8/p/11425080.html)。

1、 value, method;

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method:  指定请求的method类型, GET、POST、PUT、DELETE等;

 

2、 consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

 

3、 params,headers;

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

接下来看看这我项目中它是怎么用的吧

package com.esoft.api.modules.app;

import com.esoft.api.modules.app.vo.ApiAppMessageVo;
import com.esoft.api.web.ApiSupportController;
import com.esoft.common.constant.BusinessConstant;
import com.esoft.common.enums.AppMessageStatusEnum;
import com.esoft.modules.app.domain.AppMessage;
import com.esoft.modules.app.service.IAppMessageService;
import com.ruoyi.common.core.domain.ApiResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 平台消息
 *
 * @author ZhengChongHu
 * @date 2020/8/27
 */
@RestController
@RequestMapping("/api/app/message")
public class ApiAppMessageController extends ApiSupportController {

    @Autowired
    private IAppMessageService appMessageService;


    @GetMapping("")
    public ApiResponse list(AppMessage appMessage,
                            @RequestParam(defaultValue = "1") int page,
                            @RequestParam(defaultValue = "10") int size) {

        appMessage.setStatus(AppMessageStatusEnum.SHOW.getCode());
        startPage(page, size, BusinessConstant.DEFAULT_ORDER_BY_COLUMN, "asc");
        List<AppMessage> appMessages = appMessageService.selectAppMessageList(appMessage);
        return render(appMessages, convertToApiMessageVo(appMessages));
    }


    /**
     * 转换为VO
     */
    public List<ApiAppMessageVo> convertToApiMessageVo(List<AppMessage> appMessages) {
        if (CollectionUtils.isEmpty(appMessages)) {
            return Collections.EMPTY_LIST;
        }

        List<ApiAppMessageVo> voList = new ArrayList<>();
        for (AppMessage appMessage : appMessages) {
            ApiAppMessageVo apiAppMessageVo = new ApiAppMessageVo();
            BeanUtils.copyProperties(appMessage, apiAppMessageVo);
            voList.add(apiAppMessageVo);
        }
        return voList;
    }



}

二、@RestController

三、@ResponseBody

四、@Controller

为什么要把这三个注解放在一起讲呢?因为

@RestController注解相当于@ResponseBody + @Controller合在一起的作用

(转载自:https://www.cnblogs.com/clwydjgs/p/9255046.html)

如果我们在类上用@RestController:类中的所有方法都支持json数据返回到postman,方法上就不用加@ResponseBody,相反,如果我们在类上加了@Controller:默认类中所有方法都不支持json数据返回,那我们在方法上就要加@ResponseBody,如果不加,那么返回给postman的内容就无法显示,正是这样,我们可以根据我们的需求去选择要使用@RestController还是@Controller+@ResponseBody,如果我们不希望类中所有方法都返回json数据给postman,比如方法1返回的是json数据,方法2返回的是其他类型数据(json除外),方法3返回的数据不希望别接收到。那就选用@Controller+@ResponseBody,在类上加@Controller,在方法1上加@ResponseBody就可以了。

  1 package com.esoft.api.modules.app;
  2 
  3 import com.esoft.api.modules.app.vo.ApiAppUserVo;
  4 import com.esoft.api.web.ApiSupportController;
  5 import com.esoft.modules.user.domain.AppUser;
  6 import com.esoft.modules.user.service.IAppUserService;
  7 import com.ruoyi.common.core.domain.ApiResponse;
  8 import com.ruoyi.common.exception.api.ApiException404;
  9 import org.springframework.beans.BeanUtils;
 10 import org.springframework.beans.factory.annotation.Autowired;
 11 import org.springframework.web.bind.annotation.*;
 12 
 13 import javax.servlet.http.HttpServletRequest;
 14 
 15 /**
 16  * App用户
 17  *
 18  * @author ZhangChonghu
 19  * @date 2020/8/19
 20  * 希望说有方法都返回json数据到postman,用@RestController
 21  */
 22 @RestController
 23 @RequestMapping("/api/user/info")
 24 public class ApiAppUserController extends ApiSupportController {
 25 
 26     @Autowired
 27     private IAppUserService appUserService;
 28 
 29 
 30     /**
 31      * App用户信息
 32      */
 33     @GetMapping("/own")
 34     public ApiResponse own(HttpServletRequest request) {
 35 
 36         String mobile = getLoginName(request);
 37         AppUser appUser = appUserService.selectAppUserByMobile(mobile);
 38         if (appUser == null) {
 39             throw new ApiException404();
 40         }
 41 
 42         return ApiResponse.success(convertToApiAppUserVo(appUser));
 43     }
 44 
 45 
 46     /**
 47      * 编辑App用户信息
 48      */
 49     @RequestMapping(value = "/own", method = {RequestMethod.PUT, RequestMethod.PATCH})
 50     public ApiResponse own(ApiAppUserVo apiAppUserVo, HttpServletRequest request) {
 51 
 52         String mobile = getLoginName(request);
 53         AppUser appUser = appUserService.selectAppUserByMobile(mobile);
 54         BeanUtils.copyProperties(apiAppUserVo, appUser);
 55         appUser.setMobile(mobile);
 56         int result = appUserService.updateAppUser(appUser);
 57         if (result > 0) {
 58             return ApiResponse.success("操作成功", convertToApiAppUserVo(appUser));
 59         }
 60 
 61         return ApiResponse.error("操作失败");
 62     }
 63 
 64     /**
 65      * App用户信息
 66      */
 67     @GetMapping("/{id}")
 68     public ApiResponse detail(@PathVariable(name = "id") String id) {
 69 
 70         AppUser appUser = appUserService.selectAppUserById(id);
 71         if (appUser == null) {
 72             throw new ApiException404();
 73         }
 74         return ApiResponse.success(convertToApiAppUserVo(appUser));
 75     }
 76 
 77 
 78     /**
 79      * 编辑App用户信息/
 80      */
 81     @RequestMapping(value = "/{id}", method = {RequestMethod.PUT, RequestMethod.PATCH})
 82     public ApiResponse edit(@PathVariable(name = "id") String id, ApiAppUserVo apiAppUserVo) {
 83 
 84         AppUser appUser = appUserService.selectAppUserById(id);
 85         BeanUtils.copyProperties(apiAppUserVo, appUser);
 86         int result = appUserService.updateAppUser(appUser);
 87         if (result > 0) {
 88             return ApiResponse.success("操作成功", convertToApiAppUserVo(appUser));
 89         }
 90 
 91         return ApiResponse.error("操作失败");
 92     }
 93 
 94 
 95     /**
 96      * 转换为VO类
 97      */
 98     public ApiAppUserVo convertToApiAppUserVo(AppUser appUser) {
 99         if (appUser == null) {
100             return null;
101         }
102         ApiAppUserVo apiAppUserVo = new ApiAppUserVo();
103         BeanUtils.copyProperties(appUser, apiAppUserVo);
104         return apiAppUserVo;
105     }
106 
107 
108 }

注意看区别

  1 package com.esoft.api.modules.app;
  2 
  3 import com.esoft.api.modules.app.vo.ApiAppUserVo;
  4 import com.esoft.api.web.ApiSupportController;
  5 import com.esoft.modules.user.domain.AppUser;
  6 import com.esoft.modules.user.service.IAppUserService;
  7 import com.ruoyi.common.core.domain.ApiResponse;
  8 import com.ruoyi.common.exception.api.ApiException404;
  9 import org.springframework.beans.BeanUtils;
 10 import org.springframework.beans.factory.annotation.Autowired;
 11 import org.springframework.stereotype.Controller;
 12 import org.springframework.web.bind.annotation.*;
 13 
 14 import javax.servlet.http.HttpServletRequest;
 15 
 16 /**
 17  * App用户
 18  *
 19  * @author ZhangChonghu
 20  * 希望所有方法都返回json数据,使用@Controller+@ResponseBody
 21  * 如果不希望方法返回json数据到前端,在方法上去掉@ResponseBody
 22  * 切记别把@Controller去掉了
 23  * @date 2020/8/19
 24  */
 25 @Controller
 26 @RequestMapping("/api/user/info")
 27 public class ApiAppUserController extends ApiSupportController {
 28 
 29     @Autowired
 30     private IAppUserService appUserService;
 31 
 32 
 33     /**
 34      * App用户信息
 35      */
 36     @ResponseBody
 37     @GetMapping("/own")
 38     public ApiResponse own(HttpServletRequest request) {
 39 
 40         String mobile = getLoginName(request);
 41         AppUser appUser = appUserService.selectAppUserByMobile(mobile);
 42         if (appUser == null) {
 43             throw new ApiException404();
 44         }
 45 
 46         return ApiResponse.success(convertToApiAppUserVo(appUser));
 47     }
 48 
 49 
 50     /**
 51      * 编辑App用户信息
 52      */
 53     @ResponseBody
 54     @RequestMapping(value = "/own", method = {RequestMethod.PUT, RequestMethod.PATCH})
 55     public ApiResponse own(ApiAppUserVo apiAppUserVo, HttpServletRequest request) {
 56 
 57         String mobile = getLoginName(request);
 58         AppUser appUser = appUserService.selectAppUserByMobile(mobile);
 59         BeanUtils.copyProperties(apiAppUserVo, appUser);
 60         appUser.setMobile(mobile);
 61         int result = appUserService.updateAppUser(appUser);
 62         if (result > 0) {
 63             return ApiResponse.success("操作成功", convertToApiAppUserVo(appUser));
 64         }
 65 
 66         return ApiResponse.error("操作失败");
 67     }
 68 
 69     /**
 70      * App用户信息
 71      */
 72     @ResponseBody
 73     @GetMapping("/{id}")
 74     public ApiResponse detail(@PathVariable(name = "id") String id) {
 75 
 76         AppUser appUser = appUserService.selectAppUserById(id);
 77         if (appUser == null) {
 78             throw new ApiException404();
 79         }
 80         return ApiResponse.success(convertToApiAppUserVo(appUser));
 81     }
 82 
 83 
 84     /**
 85      * 编辑App用户信息/
 86      */
 87     @ResponseBody
 88     @RequestMapping(value = "/{id}", method = {RequestMethod.PUT, RequestMethod.PATCH})
 89     public ApiResponse edit(@PathVariable(name = "id") String id, ApiAppUserVo apiAppUserVo) {
 90 
 91         AppUser appUser = appUserService.selectAppUserById(id);
 92         BeanUtils.copyProperties(apiAppUserVo, appUser);
 93         int result = appUserService.updateAppUser(appUser);
 94         if (result > 0) {
 95             return ApiResponse.success("操作成功", convertToApiAppUserVo(appUser));
 96         }
 97 
 98         return ApiResponse.error("操作失败");
 99     }
100 
101 
102     /**
103      * 转换为VO类
104      */
105     public ApiAppUserVo convertToApiAppUserVo(AppUser appUser) {
106         if (appUser == null) {
107             return null;
108         }
109         ApiAppUserVo apiAppUserVo = new ApiAppUserVo();
110         BeanUtils.copyProperties(appUser, apiAppUserVo);
111         return apiAppUserVo;
112     }
113 
114 
115 }

五、@ResquestParam

六、@PathVariable
这两个注解新手很容易搞混,我教大家一个方法能完美区分二者

ResquestParam(拆分为:resquest+Param ,翻译过来就是请求+参数)请求的参数就是url携带的参数(可以是get,可以是post);该注解有三个属性:

-value:请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。比如上图中第一个参数如果不设置value="page",则前端传入的参数名必须为pageNum,否则在后台接口中pageNum将接收不到对应的数据

-required:该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

-defaultValue:参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。如果设置了此变量required不论是设置为true还是false其结果都是false,注意默认值可以使用SpEL表达式,如"#{systemProperties['java.vm.version']}"

如下:postman请求要携带参数page,size,如果不携带page默认是1,size默认是20

 1 package com.esoft.api.modules.platform;
 2 
 3 import com.esoft.api.modules.platform.vo.ApiPlatformInsuranceVo;
 4 import com.esoft.api.web.ApiSupportController;
 5 import com.esoft.modules.platform.domain.PlatformInsurance;
 6 import com.esoft.modules.platform.service.IPlatformInsuranceService;
 7 import com.ruoyi.common.core.domain.ApiResponse;
 8 import org.springframework.beans.BeanUtils;
 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.util.CollectionUtils;
11 import org.springframework.web.bind.annotation.GetMapping;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.RequestParam;
14 import org.springframework.web.bind.annotation.RestController;
15 
16 import java.util.ArrayList;
17 import java.util.Collections;
18 import java.util.List;
19 
20 /**
21  * 保险公司平台列表
22  *
23  * @author ZhangChongHu
24  * @date 2020/8/18
25  */
26 @RestController
27 @RequestMapping("/api/platform/insurance")
28 public class ApiPlatformInsuranceController extends ApiSupportController {
29 
30     @Autowired
31     private IPlatformInsuranceService platformInsuranceService;
32 
33 
34     /**
35      * 保险平台列表
36      */
37     @GetMapping("")
38     public ApiResponse list(PlatformInsurance platformInsurance,
39                             @RequestParam(defaultValue = "1") int page,
40                             @RequestParam(defaultValue = "20") int size) {
41 
42         startPage(page, size, "sort_seq", "asc");
43         List<PlatformInsurance> list = platformInsuranceService.selectPlatformInsuranceList(platformInsurance);
44 
45         return render(list, convertToApiPlatformInsuranceVo(list));
46     }
47 
48 
49     /**
50      * 转换为VO实例
51      * @param list
52      * @return
53      */
54     public List<ApiPlatformInsuranceVo> convertToApiPlatformInsuranceVo(List<PlatformInsurance> list) {
55         if (CollectionUtils.isEmpty(list)) {
56             return Collections.emptyList();
57         } else {
58             List<ApiPlatformInsuranceVo> voList = new ArrayList<>();
59             for (PlatformInsurance insurance : list) {
60                 ApiPlatformInsuranceVo insuranceVo = new ApiPlatformInsuranceVo();
61                 BeanUtils.copyProperties(insurance, insuranceVo);
62                 voList.add(insuranceVo);
63             }
64             return voList;
65         }
66     }
67 
68 
69 }

@PathVariable(拆分为:Path+Variable,翻译过来就是路径+可变的)接收请求路径中占位符的值,并把值赋值给方法中的参数

如下:

(转载自:https://blog.csdn.net/sswqzx/article/details/84194979)

package com.day01springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
 
/**
 * @ Author   
 * @ Date    
 */
@Controller
@RequestMapping("hello")
public class HelloController2 {
    /**
     *3、占位符映射
     * 语法:@RequestMapping(value=”user/{userId}/{userName}”)
     * 请求路径:http://localhost:8080/hello/show5/1/james
     * @param ids
     * @param names
     * @return
     */
    @RequestMapping("show5/{id}/{name}")
    public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
        mv.setViewName("hello2");
        return mv;
    }
}

@PathVariable("参数名")里面的参数要和@RequestMapping("show5/参数名")一致,就是@RequestMapping中没有参数a,@PathVariable("a")就是错误的

如果如果@RequestMapping()中有多个参数,就可以用多个@PathVariable接收

@PathVariable("id") Long ids 后面的这个ids为任意命名,也可以和@PathVariable里面的参数名一致。

posted @ 2020-08-29 09:12  天下没有收费的bug  阅读(1241)  评论(0编辑  收藏  举报