SpringBoot防忘指南

本文详细介绍了SpringBoot中的关键注解如@SpringBootApplication、@Controller、@RequestMapping等的用法,以及如何读取配置文件和Thymeleaf模板的运用。涵盖了自动配置、数据校验和自定义过滤器等内容。
摘要由CSDN通过智能技术生成

注解

@SpringBootApplication

启动器,注解在有main()函数的类上。

它整合了以下三个注解:

  • @SpringBootConfiguration
    声明当前类是一个配置类,与@Configuration作用相同。

  • @EnableAutoConfiguration
    Springboot实现自动化配置的核心注解。通过这个注解把spring应用所需的bean注入容器中。

  • @ComponentScan
    自动扫描注解标识的类。默认情况下,它扫描所有类型,并且扫描范围是@ComponentScan注解所在配置类包及子包的类。因为@SpringBootApplication注释的类(XxxApplication)放在所有包的同一目录,所以可以将整个项目的类全部扫描。

@Controller

定义一个控制器类。

分发处理器会扫描使用该类的方法,并检测方法是否使用了@RequestMapping注解,因为该方法才是处理请求的处理器。

@RequestMapping

用法:@RequestMapping(name="/xxx", method= RequestMethod.GET/POST)

SpringBoot提供以下五个注解。

  • @GetMapping,处理 Get 请求
  • @PostMapping,处理 Post 请求
  • @PutMapping,⽤于更新资源
  • @DeleteMapping,处理删除请求
  • @PatchMapping,用于更新部分资源

@RequestBody

提供对JSON的支持,可以接收JSON格式的数据信息。

@ResponseBody

提供对JSON的支持,可以返回JSON格式的数据信息

@RestController

提供对JSON的支持,定义一个控制器类,其mapping方法无需再写@ResponseBody注解。

@RequestParam

接收url和body的key/value参数。

用法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=”xx”)

可单参数:@RequestParam(“参数名”)

@PathVariable

接收url的单值参数。

用法:

@RequestMapping("/show/{id}/{name}")
public String getUser(@PathVariable("id") Long name, @PathVariable("name") String name) {
	return "用户id:"id + "\n用户姓名:" + name;
}

@Valid

数据校验,用在@RequestMapping方法的参数前。

SpringBoot 2.3.3之后,spring-boot-starter-web删除了validation的依赖,需要手动添加。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

用法:

在这里插入图片描述在这里插入图片描述
在entity:message为出错时返回信息。

public class User {
	@NotEmpty(message="姓名不能为空")
	private String name
	@NotEmpty(message="密码不能为空")
	@Length(min=6,message="密码长度不能小于6位")
	private String pass
    //嵌套必须加 @Valid,否则嵌套中的验证不生效
    @Valid
    @NotNull(message = "用户信息不能为空")
    private UserInfo userInfo;
}

public class UserInfo {
    @NotBlank(message = "年龄不为空")
	@Max(value = 100, message = "年龄不能大于100岁")
	@Min(value= 18 ,message= "必须年满18岁! " )
    private String age;
    @NotBlank(message = "性别不能为空")
    private String gender;
}

在Controller:

@RequestMapping("/saveUser")
public void saveUser(@Valid @RequestBody User user,BindingResult result) {
	System.out.println("user:"+user);
	if(result.hasErrors()) {
		List<ObjectError> list = result.getAllErrors();
		for (ObjectError error : list) {
			System.out.println(error.getCode()+ "-" + error.getDefaultMessage());
		}
	}
}

或者不用BindingResult,此时出错会抛出异常,采用全局异常处理类:

@RestControllerAdvice("club.mydlq.valid")   //指定异常处理的包名
public class GlobalExceptionHandler {

    @ResponseStatus(HttpStatus.BAD_REQUEST) //设置状态码为 400
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public String paramExceptionHandler(MethodArgumentNotValidException e) {
        BindingResult exceptions = e.getBindingResult();
        // 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
        if (exceptions.hasErrors()) {
            List<ObjectError> errors = exceptions.getAllErrors();
            if (!errors.isEmpty()) {
                // 这里列出了全部错误参数,按正常逻辑,只需要第一条错误即可
                FieldError fieldError = (FieldError) errors.get(0);
                return fieldError.getDefaultMessage();
            }
        }
        return "请求参数错误";
    }

}

SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证

@Service

标志业务层组件。

@Autowired @Resource

@Autowired按byType自动注入

@Resource默认按 byName自动注入,有两个属性:name和type

Filter

@WebFilter 自定义的过滤器器优先级顺序不能⽣生效,推荐使用FilterRegistrationBean。

首先自定义Filter类,继承Filter:

public class MyFilter implements Filter {
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}
	@Override
	public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) 
				throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest request = (HttpServletRequest) srequest;
		System.out.println("this is MyFilter,url :"+request.getRequestURI());
		filterChain.doFilter(srequest, sresponse);
	}
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
}

Configuration:

@Configuration
public class WebConfiguration {
	@Bean
	public FilterRegistrationBean FilterRegistration1() {
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(new MyFilter());
		registration.addUrlPatterns("/*");
		registration.setName("MyFilter");
		registration.setOrder(2);
		return registration;
	}
	@Bean
	public FilterRegistrationBean FilterRegistration2() {
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(new MyFilter2());
		registration.addUrlPatterns("/*");
		registration.setName("MyFilter2");
		registration.setOrder(1);
		return registration;
	}
}

order低的先执行。

读取配置文件

在 application.properties 中配置:

xxx.yyy=12
xxx.zzz=悠哈抹茶

在 application.yml 中配置:

xxx:
  yyy:12
  zzz:悠哈抹茶

@Value默认读取 application.properties 或者 application.yml 文件:

@Value("${xxx.yyy}")
private int y;

@ConfigurationProperties(prefix=“xxx”),表示以 xxx 开头的属性会自动赋值到对象的属性中:

//@Component 的定义为实例,⽅便在 Spring Boot 项⽬中引⽤
@Component
@ConfigurationProperties(prefix="xxx")
public class XxxProperties 
	//数据类型得一致
	private int yyy;
	private String zzz;

	//getter setter⽅法
}

@PropertySource(“classpath:other.properties”)可以自定义配置文件的位置。

Thymeleaf

Thymeleaf 笔记

1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值