Spring Boot适合来开发WEB应用程序,因为它提供了很多便利,如支持嵌入式HTTP服务器;提供了starter来管理依赖,快速开始,例如使用spring-boot-starter-web开始web应用程序开发,使用spring-boot-starter-webflux开始响应式web开发。
Spring Web MVC框架
在SpringMVC框架中,使用@Controller或@RestController标注请求处理器,使用@RequestMapping标志请求处理方法,例如:
@RestController @RequestMapping(value="/users") public class MyRestController { @RequestMapping(value="/{user}", method=RequestMethod.GET) public User getUser(@PathVariable Long user) { // ... } @RequestMapping(value="/{user}/customers", method=RequestMethod.GET) List<Customer> getUserCustomers(@PathVariable Long user) { // ... } @RequestMapping(value="/{user}", method=RequestMethod.DELETE) public User deleteUser(@PathVariable Long user) { // ... } }
Spring MVC自动配置
Spring Boot的自动配置特性在开发Spring MVC WEB应用时相当方便。
默认情况下,Spring Boot自动配置提供的东东:
- ContentNegotiatingViewResolver和BeanNameViewResolver
- 支持静态资源
- Converter, GenericConverter, and Formatter
- HttpMessageConverters
- MessageCodesResolver
- 支持静态index.html
- 支持自定义Favicon
- ConfigurableWebBindingInitializer
如果上面的东东并不能满足你,你还可以:
- 如果你想在上面自动配置的基础上,扩展其他功能,如interceptors, formatters, view controllers等,你可以通过@Configuration标注一个WebMvcConfigurer来扩展,但是注意不能标注@EnableWebMvc。
- 如果你想在上面自动配置的基础上,实现RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver,你可以通过@Configuration标注一个WebMvcRegistrationsAdapter来实现,但是注意不能标注@EnableWebMvc。
- 如果你想要完全控制权,那你就需要@EnableWebMVC来标注前面配置类。
HttpMessageConverters
HttpMessageConverters用来转换响应消息,例如把请求处理方法返回的对象直接转换成JSON或XML。
如果你需要自定义转换器,可以这样做:
import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.*; import org.springframework.http.converter.*; @Configuration(proxyBeanMethods = false) public class MyConfiguration { @Bean public HttpMessageConverters customConverters() { HttpMessageConverter<?> additional = ... HttpMessageConverter<?> another = ... return new HttpMessageConverters(additional, another); } }
自定义JSON序列化器和反序列化器
如果你使用Jackson来序列化和反序列JSON数据,你可能希望自定义JsonSerializer和JsonDeserializer,Spring Boot提供了一个@JsonComponent注解可以使自定义更加简单。
@JsonComponent可以直接使用在JsonSerializer、JsonDeserializer和KeyDeserializer实现类上,也可以使用在外部类上,例如:
import java.io.*; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; import org.springframework.boot.jackson.*; @JsonComponent public class Example { public static class Serializer extends JsonSerializer<SomeObject> { // ... } public static class Deserializer extends JsonDeserializer<SomeObject> { // ... } }
MessageCodesResolver
MessageCodesResover用于为绑定错误生成错误码。
静态内容
默认情况下,静态资源放在/static、/public、/resources目录下,Spring MVC使用ResoucesHttpRequestHandler来处理静态资源,你可以重写WebMvcConfigurer的addResourceHandlers来自定义ResoucesHttpRequestHandler。
默认情况下,静态资源映射到/**,你可以通过spring.mvc.static-path-pattern属性重写,示例:
spring.mvc.static-path-pattern=/resources/**
同样可以通过spring.resources.static-locations自定义静态资源的位置,示例:
spring.resources.static-locations=/icon/
欢迎页
默认的欢迎页是index.html,如果index.html不存在,则查找index模板文件
自定义favicon
favicon.icon文件直接放在静态资源目录下。
路径匹配和内容协商