SpringMVC--10配置过滤器以及Json

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC--10配置过滤器以及Json相关的知识,希望对你有一定的参考价值。

文章目录

12 配置过滤器

在SpringMVC中我们依然可以使用过滤器来进行一些处理,我们可以像在Servlet阶段在web.xml中配置,也可以使用SpringMVC提供的Java类来配置

12.1 在web.xml配置

<filter>
  <filter-name>characterFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

12.2 Java类配置

在Java类配置的话,我们需要在初始化的类,也就是去配置Spring配置文件和映射路径的类,重新getServletFilters方法

public class ApplicationInitialize extends AbstractAnnotationConfigDispatcherServletInitializer 
    @Override
    protected Class<?>[] getRootConfigClasses() 
        return new Class[]ApplicationContext.class;
    

    @Override
    protected Class<?>[] getServletConfigClasses() 
        return new Class[]MvcConfig.class;
    

    @Override
    protected String[] getServletMappings() 
        return new String[]"/";
    

    @Override
		protected Filter[] getServletFilters() 
  	CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  	characterEncodingFilter.setEncoding("UTF-8");
  	// 强制覆盖,这里会把响应的编码也设置
  	characterEncodingFilter.setForceEncoding(true);
  	// 多个过滤器可以在数组中去继续添加
  	return new Filter[] characterEncodingFilter;
		

13 Json数据

13.1 简介

是一种数据的交换格式,也是一种数据的交换标准,主要用于浏览器和服务器之间的数据交互

格式:“属性名称”:属性值

13.2 结构


  "key": "value",
  "key2": "value2",
  "key3": null,
  "student": 
    "name": "xiaolong",
    "age": 18,
    "course": 
      "courseName": "vip11",
      "courseAddress": "只支持双引号"
    
  

13.3 Jackson

Jackson和FastJson一样是一个java用于处理JSON数据的类库,但是Spring中默认使用的Jackson,所以对Jackson的支持是比较好的,直接将依赖导入即可使用

注意:

  • 默认的Jackson在导入依赖后,还需要确保SpringMVC的配置文件中开启了注解驱动的支持
  • 在使用java类来配置SpringMVC的时候,注解驱动也开启了,但是没有自动去使用Jackson(也有可能是我配置错了),可以选择在配置类中添加Jackson的转化器。具体添加方法可以参照后面设置时间响应。

13.3.1 导入依赖

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.9</version>
</dependency>

13.3.2 SpringMVC中的简单使用

13.3.2.1 响应对象

我们可以直接响应一个对象回去,而不是响应字符串

@GetMapping("/request")
  public Student rest1() 
    Student student = new Student();
    student.setName("晓龙");
    student.setAge(23);
    return student;
  
13.3.2.2 响应集合

通过Jackson的处理后,我们也可以返回一个map集合

@GetMapping("/request")
  public Map<String, String> test1() 
    HashMap<String, String> map = new HashMap<>();
    map.put("state", "成功");
    return map;
  

13.3.3 局部处理时间响应

如果我们想要返回一个时间响应,通过Jackson就可以帮我们来处理,我们可以选择局部的方法,采用的是Jackson为我们提供的注解@JsonFormat

注意:

  • 该注解使用在我们对应的属性字段上
  • 该注解的pattern就是我们设置的格式
  • Jackson在处理时间的时候,默认是不会去计算当地时间,我们需要手动加上东八
/**
   * pattern:时间的格式
   * timezone:时区
   */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthday;

13.3.4 全局处理时间响应

对于时间的处理,Jackson也提供了全局的方法,需要我们去配置转化器

13.3.4.1 基于配置文件
<mvc:annotation-driven>
    <mvc:message-converters>
   
      <!--Spring提供的Jackson的转化器-->
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <!--设置对象映射-->
        <property name="objectMapper">
          <!--映射的对象就是Jackson提供的映射-->
          <bean class="com.fasterxml.jackson.databind.ObjectMapper">
            <!--设置映射对象里面的时间格式-->
            <property name="dateFormat">
              <!--采用java通过的SimpleDateFormat-->
              <bean class="java.text.SimpleDateFormat">
                <!--通过构造器注入格式-->
                <constructor-arg name="pattern" value="yyyy-MM-dd"/>
              </bean>
            </property>
          </bean>
        </property>
      </bean>
                
    </mvc:message-converters>
  </mvc:annotation-driven>
13.3.4.2 基于Java类
@Configurable
@EnableWebMvc
@ComponentScan(value = "com.moon", includeFilters = 
  @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class, RestController.class))
public class SpringMvcConfig implements WebMvcConfigurer 
  /**
   * 添加转化器
   */
  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> converters) 
    // 添加jackson转化器
    MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
    // 实例对象映射
    ObjectMapper objectMapper = new ObjectMapper();
    // 设置时间格式工厂
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒"));
    // 添加到jackson转化器
    jackson2HttpMessageConverter.setObjectMapper(objectMapper);
    converters.add(jackson2HttpMessageConverter);
  

以上是关于SpringMVC--10配置过滤器以及Json的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC--10配置过滤器以及Json

如何在StormCrawler中使用快速URL过滤器?

springBoot之配置文件的读取以及过滤器和拦截器的使用

SpringMVC返回JSON数据以及文件上传过滤静态资源

VScode设置vue文件中保存自动格式化代码以及settings.json文件的配置。

微信小程序页面配置以及sitemap配置