前言
在之前开发中Web应用都是使用Servlet进行开发,但是Servlet进行开发时每写一个Servlet都要对Web.xml文件进行配置,并且doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。在单元测试中必须初始化这两个参数。简而言之,就是servlet具有容器依赖性而Spring实战第二版讲的是使用SpringMVC开发Web应用,可以让我们更深刻的理解SpringMVC
一、SpringMVC是什么?
Spring MVC是基于注解的,通过像@RequestMapping、@GetMapping和@PostMapping这样的注解来启用请求处理方法的声明。大多数的请求处理方法最终会返回一个视图的逻辑名称,比如Thymeleaf模板,请求会转发到这样的视图上(同时会带有任意的模型数据)。
Spring MVC支持校验,这是通过Java Bean Validation API和Validation API的实现(如Hibernate Validator)完成的。
对于没有模型数据和逻辑处理的HTTP GET请求,可以使用视图控制器。
除了Thymeleaf之外,Spring支持各种视图方案,包括FreeMarker、Groovy Templates和Mustache。
SpringMVC是Spring+MVC,实现了WebMVC设计模式(MVC:Model,View,Conltroller)视图可以复用,即:控制器和视图是弱偶合关系,
二、开发Web应用
2.1定义Taco类
package tacos;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;
@Data
public class Taco {
@NotNull
@Size(min=5, message="名字最小五个字符")
private String name;
@Size(min=1, message="最少一个")
private List<Ingredient> ingredients;
private Long id;
private Date createdAt;
}
在我们的领域中,taco配料是非常简单的对象。每种配料都有一个名称和类型,以便于对其进行可视化的分类(蛋白质、奶酪、酱汁等)。每种配料还有一个ID,这样的话对它的引用就能非常容易和明确。如下的Ingredient类定义了我们所需的领域对象。
package tacos;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
public class Ingredient {
private final String id;
private final String name;
private final Type type;
public static enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
}
Ingredient类是一个非常简单的类,但是最不寻常的一点是它似乎缺少了常见的getter和setter方法,以及equals()、hashCode()、toString()等方法。
这是因为我们使用了Lombok的库,这个库并不是Spring提供的,但是它很有用,使用@Data注解可为我们自动生成getter和setter方法,以及equals()、hashCode