Spring Web MVC Framework mvc框架

1.The “Spring Web MVC Framework”

Spring MVC 框架是一种模型视图控制器框架。

其通过创建@Controller或者@RestController beans实例来处理进来的http请求。

控制器中的方法通过@RequestMapping来映射。

下面的代码示例配置了一个@RestController来处理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<Customer> getUserCustomers(@PathVariable Long user) {
        // ...
    }

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

}

Spring MVC是spring框架核心的一部分,更多细节可以查看官方文档 https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/web.html#mvc

2.Spring MVC Auto-configuration

Springboot为spring MVC提供自动配置,适用于大多数应用程序。

自动配置在Spring的默认值之上添加了以下功能:

  • 包含 ContentNegotiatingViewResolver 和 BeanNameViewResolver 实例
  • 支持处理静态资源
  • 自动注册Converter,GenericConverter,Formatter实例
  • 支持HttpMessageConverters
  • 自动注册MessageCodesResolver
  • 支持静态的jindex.html

如果您想保留Spring Boot MVC功能并且想要添加其他 MVC配置(拦截器,格式化程序,视图控制器和其他功能),您可以添加自己的@Configuration注解,返回类型WebMvcConfigurer,并且不需要 @EnableWebMvc

3.HttpMessageConverters(消息转换器)

Spring MVC使用HttpMessageConverter接口来转换HTTP请求和响应。

明智的默认设置包含在开箱即用中。例如,对象可以自动转换为JSON(通过使用Jackson库)或XML(如果可用,则使用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);
    }

}

上下文中存在的任何HttpMessageConverter接口bean都将添加到转换器列表中。您也可以以相同的方式覆盖默认转换器。

4.自定义JSON序列化程序和反序列化程序

如果您使用Jackson序列化和反序列化JSON数据,您可能希望编写自己的类JsonSerializerJsonDeserializer类。

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

}

5.静态内容

默认情况下,Spring Boot从classpath路径中的/static( /public/resources/META-INF/resources)目录或者ServletContext根目录中提供静态内容。

它使用Spring MVC中的ResourceHttpRequestHandler,以便您可以通过addResourceHandlers方法添加自己的WebMvcConfigurer来修改该行为并覆盖该 方法。

6.路径匹配

Spring MVC可以通过查看请求路径并将其与应用程序中定义的映射(例如,@GetMapping Controller方法上的注释)相匹配,将传入的HTTP请求映射到处理程序。

Spring Boot默认选择禁用后缀模式匹配,这意味着请求"GET /projects/spring-boot.json"不会与@GetMapping("/projects/spring-boot")映射匹配 。

7.全局错误处理

@ControllerAdvice 可以用于处理来自控制器的所有未捕获异常,指定返回数据。
@ControllerAdvice()
public class AcmeControllerAdvice extends ResponseEntityExceptionHandler {

    @ExceptionHandler(YourException.class)
    @ResponseBody
    ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
        HttpStatus status = getStatus(request);
        return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode == null) {
            return HttpStatus.INTERNAL_SERVER_ERROR;
        }
        return HttpStatus.valueOf(statusCode);
    }

}

8.CORS支持

从4.2版本开始,Spring MVC支持跨域访问。在Sprinboot应用程序@Controller中的方法使用@CrossOrigin便可以支持跨域。也可以全局设置跨域处理(注册bean WebMvcConfigurer)

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**");
            }
        };
    }
}

 

 

转载于:https://www.cnblogs.com/gc65/p/10628706.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值