Spring Boot开发web应用

Spring Boot非常适合web应用的开发, 你可以非常容易的创建一个内嵌tomcat,jetty,undertow,netty等HTTP服务的应用,可以通过spring-boot-starter-web实现快速构建,也可以通过spring-boot-starter-webflux模块快速构建响应式web服务。

Spring Web MVC框架

Spring Web MVC框架是一个富“model view controller”Web框架,Spring MVC让你能够创建一个由@Controller或者@RestController注解的类来处理HTTP请求。Controller中的方法使用@RequestMapping注解,如下是一个示例,用于对JSON类型数据请求处理:

@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 getUserCustomers(@PathVariable Long user){
    }

    @RequestMapping(value="/{user}",method=RequestMethod.GET)
    public User deleteUser(@PathVariable Long user){}
}

Spring MVC 自动配置

Spring Boot给Spring MVC提供给的自动配置对绝大多数应用来说都工作的很好。

这些自动配置在spring默认之上添加了如下功能:

  • 包含ContentNegotiatingViewResolver和BeanNameViewResolver实体。
  • 支持提供静态资源服务,包括支持WebJars。
  • Converter,GenericConverter,Formatter的自动注册。
  • 支持HttpMessageConverters.
  • MessageCodeResolver的自动注册。
  • 静态index.html支持
  • 订制Favicon支持
  • ConfigurableWebBindingInitializer的自动使用。

如果你既想要使用Spring Boot MVC的自动配置功能,还想要添加其他的MVC配置(如interceptors,formatters,view controllers等),那么你可以添加自己的@Configuration类(WebMvcConfigurer类型的),但是不能使用@EnableWebMvc注解。如果你希望提供RequestMappingHandlerMapping,RequetsMappingHandlerAdapter或者ExceptionHandlerExceptionResolver的订制实例,你可以通过声明一个WebMvcRegistrationSAdapter类型实例的组件。

如果你想要完全控制Spring MVC,那么在你的@Configuration注解的配置类上添加@EnableWebMvc注解。

HttpMessageConverters

Spring MVC使用HttpMessageConverters接口转换HTTP请求和响应。合理的默认值都是内嵌的并且开箱可用的,例如对象可以自动转换为JSON(使用Jackson库)或者XML(如果可用就使用Jackson XML扩展,否则使用JAXB)。字符串默认使用UTF-8使用。

如果想要添加或者订制转换器,你可以使用Spring Boot的HttpMessageConverters类:

import org.Springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.*;
import org.springframework.http.converter.*;

@Configuration
public class MyConfiguration{

    @Bean
    public HttpMessageConverters customConverters(){
        HttpMessageConverter additional = ...;
        HttpMessageConverter another = ...;
        return new HttpMessageConverters(additional,another);
    }
}

订制JSON序列化器和反序列化器(Serializers和Deserializes)

如果你在使用Jackson序列化和反序列化JSON数据,你可能想要书写你自己的JsonSerializer和JsonDeserializer。

在Spring Boot项目中,你可以@JsonComponent直接注解在JsonSerializer或者JsonDeserializer的实现类上,也可以注解在一个包含有实现JsonSerializer和JsonDeserializer接口的内部类的类上,如下:

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{}

    public static class Deserializer extends JsonDeserializer{}
}

所有ApplicationContext中使用@JsonComponent注解的beans都会自动使用Jackson注册,且使用此注解的的类可以被做为组件直接被@ComponentScan扫描到(扫描路径配置正确)。

MessageCodesResolver

Spring MVC提供一种生成错误编码的策略用以渲染所绑定错误的错误消息:MessageCodesResolver。SpringBoot同样会创建这样的实例如果你设置了spring.mvc.message-codes-resolver.format属性值为PREFIX_ERROR_CODE或者POSTFIX_ERROR_CODE。详细参看DefaultMessageCodesResolver.Format。

静态内容

默认情况下,Spring Boot为classpath或者ServletContext的根目录下的叫作/static或者/resources或者/META-INF/resources目录下的静态内容提供服务,使用的是Spring MVC的ResourceHttpRequestHandler,如果你想想在改变此默认行为,需要添加你自己的SebMvcConfigurer并且覆盖其addResourceHandlers方法。

在一个独立的web应用中,来自容器的默认servlet也是处于启用状态的,并且扮演一个回调(fallback)角色,来自于ServletContext根目录的静态内容spring不处理静态时则由其处理。

默认情况下,资源文件放在项目/**下,但是可以通过spring.mvc.static-path-pattern调整,如可以重定位所有的资源文件到/resources/**下如下:

spring.mvc.static-path-pattern=/resources/**

也可能通过spring.resources.static-locations订制自己的资源位置。当然如果这样做了,welcome页面也将会从此订制的默认位置查找。

你可能感兴趣的:(spring,学习)