Spring相关注解使用总结

@RequestMapping

SpringMVC会根据该注解后面跟的值去寻找目标方法。可以标注在类和方法上面,顺序为先类,再方法。如果类上不加次注解则直接根据方法上的注解去寻找。
  1. @RequestMapping(value = "xxx") <=> @RequestMapping("xxx");
  2. @RequestMapping({"list",""}):值为list或者为空,可以在方法中这样标注,这样路径进到该类中就会默认跳到该接口。
  3. @RequestMapping(value = "xxx", method = RequestMethod.GET),设置该接口的请求方式。
  4. 动态参数:@RequestMapping("xxx/{username}/yyy/{password}"),这样该接口请求的时候就必须在指定位置上填写相应的参数。该动态参数也可以用注解的方式去获取:@PathVariable("username"),该注解是要放在方法的入参里面的,这样在方法里面就可以直接拿“username”去使用。范例如下:  
@Controller
public class TestController {
     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)
     public String getLogin(@PathVariable("userId") String userId,
         @PathVariable("roleId") String roleId){
         System.out.println("User Id : " + userId);
         System.out.println("Role Id : " + roleId);
         return "hello";
     }
     @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)
     public String getProduct(@PathVariable("productId") String productId){
           System.out.println("Product Id : " + productId);
           return "hello";
     }
     @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",
           method = RequestMethod.GET)
     public String getRegExp(@PathVariable("regexp1") String regexp1){
           System.out.println("URI Part 1 : " + regexp1);
           return "hello";
     }
}


@ModelAttribute

此注解标注的方法会在所在类中每一个方法执行前执行。
常用情景:编辑表单。
	@ModelAttribute
	public AppInfo get(@RequestParam(required=false) String id) {
		if (StringUtils.isNotBlank(id)){
			return appInfoService.getAppInfo(id);
		}else{
			return new AppInfo();
		}
	}
	@ModelAttribute
	public void get(@RequestParam(required=false) String id, Map<String, Object> map) {
		AppInfo appInfo = null;
		if (StringUtils.isNotBlank(id)){
			appInfo =  appInfoService.getAppInfo(id);
		}else{
			appInfo = new AppInfo();
		}
		map.put("appInfo", appInfo);
	}
	@RequestMapping("form")
	public String addAppInfo(AppInfo appInfo, Model model){
		model.addAttribute("appInfo", appInfo);
		return "modules/appInfoForm";
	}

页面上点击删除、编辑的时候调用的是“form”这个接口,但是在调用该接口之前会调用@ModelAttribute标注的方法。
点击编辑按钮后台代码过程:
1、执行@ModelAttribute注解标注的方法,获取到对象。
2、把表单的请求参数赋给该对象对应的属性。
3、把上述对象传入目标方法的参数。
注意:注意对象命名的一致,其内在原因目前还不太清楚,要看源码,待补充。

参考链接:


@RequestParam和@RequestBody

@RequestParam可以用于GET和POST请求:
GET:
    @RequestMapping(value = "/saveUrl", method = RequestMethod.GET)
    public void toSaveRequest(@RequestParam(value = "url") String url, @RequestParam(value = "method") String method, HttpServletRequest request, HttpServletResponse response){
        EtaSaveRequest savedRequest = new EtaSaveRequest();
        savedRequest.setMethod(method);
        savedRequest.setRequestURI(url);
        authBeforeLoginDataStore.putSaveRequest(savedRequest, request, response);
    }
POST:
    @RequestMapping(value = "/saveUrl", method = RequestMethod.POST)
    public void toSaveRequest(@RequestParam(value = "url") String url, @RequestParam(value = "method") String method, HttpServletRequest request, HttpServletResponse response){
        EtaSaveRequest savedRequest = new EtaSaveRequest();
        savedRequest.setMethod(method);
        savedRequest.setRequestURI(url);
        authBeforeLoginDataStore.putSaveRequest(savedRequest, request, response);
    }

@RequestBody只能用于POST请求:
    @Data
    public static class urlParam {
        @NotNull private String url;
        @NotNull private String method;
    }

    @RequestMapping(value = "/saveUrl", method = RequestMethod.POST)
    public void toSaveRequest(@RequestBody urlParam param, HttpServletRequest request, HttpServletResponse response){
        EtaSaveRequest savedRequest = new EtaSaveRequest();
        savedRequest.setMethod(param.getMethod());
        savedRequest.setRequestURI(param.getUrl());
        authBeforeLoginDataStore.putSaveRequest(savedRequest, request, response);
    }
          $.ajax({
            url: "/api/user/saveUrl", 
            type: "POST",             //用@RequestParam的时候POST请求URL如上
            dataType: "json",
            contentType: "application/json",
            data: JSON.stringify({
              "url":"/orgmanage/orgList",
              "method":"GET"
            }),
          success: function success(data) {
            console.log(data);
            location.href=data.result;
          }
        });

POST请求中,一般都作为一个对象传数据,声明Content-Type为application/json。
参考地址:

@RestController和@Controller

@RestController == @Controller + @ResponseBody。
@Controller一般和SpringMVC中的视图解析器配合使用,根据前后缀匹配对应的跳转页面。
@RestController返回数据到前端,供前端进行解析,渲染页面。
参考链接:

@ResponseBody

例如后台提供一个接口返回数据,例如一个list集合,前端ajax从此接口获取数据,那么该接口就要加上此注解,否侧获取不到数据,而是会得到XXXXXXX。

未完,待续。微笑

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值