spring常用注解(二)请求类

一、@Controller与@RestController:用于标记在一个类上,表示是处理器类。

  1、@Controller:使用它标记的类就是一个SpringMVC Controller 对象。

  2、@responsebody:标记于方法上,表示该方法的返回结果直接写入HTTP response body中
 一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上 @responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response *body中。
 比如异步获取json数据,加上@responsebody后,会直接返回json数据。

  3、@RestController = @Controller+@ResponseBody,表示该类下的接口只返回数据不返回页面;

二、@RequestMapping:

1、介绍:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。可以接收post请求也可以接收get请求。返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:
通过 prefix + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作;

2、参数:

  (1)value:指定请求的实际地址

  (2)method:指定请求的method类型, GET、POST、PUT、DELETE等,衍生:@GetMapping、@PostMapping、@PutMapping

3、用法demo:

@RequestMapping(value={"", "/"}):可以为空或者/

//可以通过 http://ip:port/test或者http://ip:port/test1来访问。
@RequestMapping(value={"test", "test1"}),

三、@RequestParam与@RequestBody:controller接口接收参数注解。一个请求方法体最多只能有一个RequestBody,可以有多个RequestParam。

1、RequestParam:为缺省注解,RequestParam注解主要有下列参数:

(1) value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;()Boolean包装类型类型:默认Boolean.FALSE,其他引用类型默认为null。

(2)required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;

(3)defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。

接收参数实例:访问时,参数追加在url后,可以接收get请求,也可以接收post请求:

(1)接收基本型、包装类型:http://localhost:9999/demo/test/paramTest?a=5&b=aaa

@RequestMapping("/paramTest")
    public ResponseMessage param(int a,String b){
        System.out.println("param"+a+" "+b);
        return ResponseMessage.success();
    }

(2)接收数组: http://localhost:9999/demo/test/paramTest?userIds=a,b,c,d

@RequestMapping("/paramTest")
    public ResponseMessage param(String[] userIds){
        System.out.println(userIds[0]);
        return ResponseMessage.success();
    }

  注意:数组参数用逗号隔开,如果写成http://localhost:9999/demo/test/paramTest?userIds=[a,b,c,d],控制台打印的是:[a

(3)接收集合: @RequestParam不可以接收集合。

(4)接收对象: 注意对象里面不可以含有集合字段,因为 @RequestParam不可以接收集合  http://localhost:9999/demo/test/paramTest?userName=张三

@RequestMapping("/paramTest")
    public ResponseMessage param(UserDTO user){
        System.out.println("param"+user.getUserName());
        return ResponseMessage.success();
    }

2、RequestBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。必须是post请求,且参数放在body请求体中,接收的是JSON字符串。与RequestParam接收参数不同的是RequestBody可以接收集合(当然也支持对象里面含有集合字段。)

3、@RequestBody与@RequestParam混合使用:

 @RequestMapping("/multiTest")
    public ResponseMessage body(@RequestBody UserDTO userDTO,String a){
        System.out.println(userDTO.getUserName()+","+a);
        return ResponseMessage.success();
    }

四、@PathVariable:

 1、介绍:用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

2、demo:

@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)
public String getProduct(@PathVariable("productId") String productId){
System.out.println("Product Id : " + productId);
return "hello";
}
​
/**
	 * 获取第三方登录的地址
	 * 
	 * @param type 
	 *            类型
	 * @return 引导用户登录授权地址
	 */
	@RequestMapping("/to/{type}")
	@ResponseBody
public String getThirdLoginUrl(@PathVariable("type") String type, HttpSession session) {
		String url = webIndexPage;
		try {
			
			switch (type) {
			case OpenType.QQ:
			case OpenType.WECHAT:
			case OpenType.WEIBO:
				// 这里可以直接验证 sessionud是否相同即可
				String state = session.getId();
				url = ThirdAccountUtil.getGrantAuthorizationUrl(type, state);
				break;
			default:
				throw new ELPBizException("未知的第三方账号登录类型");
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		return url;
	}

 五、@CookieValue:

1、介绍:用来获取Cookie中的值;
2、参数: value:参数名称 required:是否必须 defaultValue:默认值
3、demo:

@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("JSESSIONID = " + sessionId);
return "success";
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值