《spring实战》学习笔记——day1

DevTools:Spring为开发人员提供的开发期工具(生产环境中自动禁用),作用:(1)代码变更后,应用自动重启(应用程序被加载到两个独立的类加载器中,一个加载main目录下的所有内容,一个加载依赖的库,代码变动时,只用改变一个类加载器,有效降低应用启动时间);(2)自动禁用模板缓存

注解总结:
@SpringBootApplication:实际上是以下3个注解的组合

  • @SpringBootConfiguration:@Configuration的特殊形式
  • @EnableAutoConfiguration:告诉springboot自动配置它认为我们会用到的组件
  • @ComponentScan:启用组件扫描,spring就可以自动发现@Controller等注解的类,并注册为Spring context

@Configuration:该注解用来标记类,告诉spring该类为配置类
@Bean:用来注解被@Configuration注解的类的方法,表明这些方法返回的对象会以bean的形式添加到spring context中

@Controller/@Service/@Repository:查看源码可知,这三个注解在定义时都一样,功能一样,只是为了开发者方便

@ResquestMapping(相对url):一般用来注解Controller类,指定该类处理该url下的HTTP请求

  • @GetMapping:一般用来注解被@RequestMapping注解类的方法,相当于对HTTP请求的细化,指定该方法来处理Get类型的HTTP请求。
  • @PostMapping:类似GetMapping

@Data:由Lombok提供,使用@Data前需加入org.projectlombok依赖,该注解的作用为:运行时自动为注解的类生成getter、setter方法以及以final属性为参数的构造器。
@Slf4j:同样由Lombok提供,被注解的类会在运行时输出日志,效果等同于:

private static final org.slf4j.Logger log= org.slf4j.LoggerFactory.getLogger(被注解类名.class)

测试相关注解:

  • @SpringBootTest:告诉JUnit在启动测试时要添加上SpringBoot的功能,即该测试类相当于main()方法中的Spring
    Application.run()
  • @RunWith():括号中放入测试运行器来指导JUnit进行如何测试,一般放SpringRunner.class
  • @WebMvcTest:将被注解的类注册到Spring MVC中,这样就可以在测试时利用Spring MVC进行访问请求等

表单校验:
spring支持Java的Bean校验API(Bean Validation API),可以通过一些注解完成校验的功能,例:
@NotNull:限制该属性不能为空
@Size(min=3,message=“至少长度为3”):限制长度并在不符合要求时提示
@NotBlank(message=“提示信息”):保证被注解的属性不为空
等等…
注意,这种注解限制如果后续没有逻辑进行处理,是不会报错且能继续执行后续逻辑的
例,在创建Taco类时进行了属性限制:

public class Taco {
  @NotNull
  @Size(min=5, message="Name must be at least 5 characters long")
  private String name;
  @Size(min=1, message="You must choose at least 1 ingredient")
  private List<String> ingredients;
}

但在逻辑中,未对Taco对象进行校验:

 @PostMapping
  public String processDesign( Taco design, Errors errors, Model model) {
  	if (errors.hasErrors()) {
      return "design";
    }
    log.info("Processing design: " + design);
    return "redirect:/orders/current";
  }

该方法并不能捕获到error,从而不执行if中程序,相当于对Taco属性的限制不起作用

那么,如何在后续进行校验呢?
在processDesign方法中,对Taco对象用@Valid注解:

public String processDesign(@Valid Taco design, Errors errors, Model model) {
    //如果@Valid注解的对象存在校验错误,该错误便会被捕获传递给processDesign方法

虽然此时错误被捕获,但是如何显示在浏览器端,给用户反馈呢?
可以使用Thymeleaf提供的方法,在前端用以下代码展示错误:

<span class="validationError"
          th:if="${#fields.hasErrors('ingredients')}"
          th:errors="*{ingredients}">Ingredient Error</span>

小改进:对于没有处理输入的@Controller,可以将其直接定义为配置类,实现相同的功能,从而减少Controller数量:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry){
    	//匹配请求url为“/”,并转发到“home1”试图上去
        registry.addViewController("/").setViewName("home1");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值