Spring、Spring MVC、SpringBoot常用註解(一)

最近准备换工作,与此同时整理下知识点顺便回忆下当初学习的注解知识点;整理的都是比较常用的注解,可能有些解释的不是很标准,也请帮忙补重下。

@RestController:需要加载spring-boot-starter-web;一般是使用在类上的,它表示的意思其实就是结合了 @Controller和@ResponseBody两个注解, 如果哪个类下的所有方法需要返回json数据格式的,就在哪个类上使用该注解,具有统一性; 需要注意的是,使用了@RestController注解之后,其本质相当于在该类的所有方法上都统一使用了@ResponseBody注解, 所以该类下的所有方法都会返回json数据格式,输出在页面上,而不会再返回视图;如果返回的是视图只用@Controller。

@ResponseBody,一般是使用在单独的方法上的,需要哪个方法返回json数据格式,就在哪个方法上使用,具有针对性。

@RequestParam,用于将请求参数区数据映射到功能处理方法的参数上。注解本质上相当于通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String–> 简单类型的转换操作由ConversionService配置的转换器来完成);详细参数:

value参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
required是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
defaultValue默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式。

@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。可用value属性指定名字,service层使用@Resource(name=“userDao”)调用spring容器中的userDao对象。

@Mapper(mybatis專用)不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。

@RequestMapping 处理请求地址映射;詳細參數

value指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method指定请求的method类型, GET、POST、PUT、DELETE等;
consumes指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params指定request中必须包含某些参数值是,才让该方法处理;
headers指定request中必须包含某些指定的header值,才能让该方法处理请求。

@ModelAttribute
ModelAttribute注解的源代码分析流程

/**
 * 1. 有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用! 
 * 2. @ModelAttribute 注解也可以来修饰目标方法 POJO 类型的入参, 其 value 属性值有如下的作用:
 * 1). SpringMVC 会使用 value 属性值在 implicitModel 中查找对应的对象, 若存在则会直接传入到目标方法的入参中.
 * 2). SpringMVC 会以 value 为 key, POJO 类型的对象为 value, 存入到 request 中. 
  */

具有如下三个作用:

  • 绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
  • 暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
  • 暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

@Valid注解用于校验
你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解限制;

@SuppressWarnings("unchecked")
	@PostMapping(value = "/save")
	@ResponseBody
	@ApiOperation(value = "新增用戶")
	public Result saveUser(@RequestBody String value, @RequestParam(value = "name") String name,
			@RequestParam(value = "password") String password, @RequestParam(value = "email") String email,
			@Valid @ModelAttribute User user,BindingResult bindingResult) {
		if(bindingResult.hasErrors()){  
	        System.out.println(bindingResult.getFieldError().getDefaultMessage());  
	        return null;  
    	}
		return new Result(HttpStatus.SC_OK,"success",true,user.toString());
	}

说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

package com.example.entity;

import java.io.Serializable;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class User implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private Integer uid;
	@NotBlank(message="用戶名不能為空")
	private String name;
	@NotBlank(message="密碼不能為空")
	private String password;
	private String screenName;
	private Integer age;
	private String sex;
    @Pattern(regexp = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$", message = "手机号格式错误")
	private String phone;
    @Email(message="郵箱格式錯誤")
	private String email;
	private String createdTime;
	private String loggTime;
	private String groupName;
}

Spring验证的错误返回 ·····> BindingResult
@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱

@PathVariable绑定URI模板变量值(绑定占位符参数到方法参数中)

@RequestMapping(value="/users/{userId}/topics/{topicId}")  
public String test(@PathVariable(value="userId") int userId,
				@PathVariable(value="topicId") int topicId) {
		User user = userLoginService.userLogin(userId,topicId);
        if(user != null){                                                  //登录成功
            request.getSession().setAttribute("session_user",user);     //将用户信息放入session
            return "index";
        }
        return "loginError";
 }

@Autowired
顾名思义,就是自动装配。其作用是替代Java代码里面的getter/setter与bean属性中的property。如果私有属性需要对外提供的话,getter应当予以保留。

@Resource
J2EE提供的一种装配注解,默认通过name属性去匹配bean,找不到再按type去匹配;如果指定了name或者type,则按照指定的去匹配bean;如果同时指定name和type,者要同时满足,一个不匹配就会报错

@Autowired和@Resource两个注解的区别:
1、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
2、@Autowired是Spring的注解,@Resource是J2EE的注解,根据导入注解的的包名就可以知晓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值