spring boot(学习笔记第三课)

spring boot(学习笔记第三课)


学习内容:

  1. Gson的解析器配置
  2. 静态资源解析

1. Gson解析器

  1. 首先看看spring boot的默认JSON转换器的效果。
  • 定义一个Entity类,准备在Controller里面显示。price这里使用@JsonIgnore,表示不希望最后输出到前端,@JsonFormat(pattern = "yyyy-MM-dd")表示日期属性按照希望的格式来进行格式化。
package com.example.demo.Entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.Date;

@Data
public class Book {
   private String name;
   private String author;
   @JsonIgnore
   private Float price;
   @JsonFormat(pattern = "yyyy-MM-dd")
   private Date publicatationDate;
}
  • Controller类里面增加一个book的方法,之后返回book变量。
    @GetMapping("/book")
    @ResponseBody
    public Book book(){
        Book book = new Book();
        book.setAuthor("finlay");
        book.setName("spring boot");
        book.setPrice(Float.valueOf(14.5F));
        book.setPublicatationDate(new Date());
        return book;
    }
  • 看看测试一下,可以看到按照预想的,price没有输出,日期也和定义的相同个数输出了。
    在这里插入图片描述
  1. 这里使用了spring boot的默认json转换包jackson-bind,还可以使用Google的Json转换包。
  • 首先从maven工程,从spring-boot-starter-web去除json转换包jackson-bind,并加入google的json处理包gson
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>com.fasterxml.jackson.core</groupId>
					<artifactId>jackson-databind</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>

在这里插入图片描述
对pom.xml加入更新依赖之后,需要重新加载项目。

  • 检查下默认的Gson的配置。点击IntelliJ IDEA的右边🔍按钮。查找GsonHttpMessageConverterConfiguration
    在这里插入图片描述
    看看这个类的配置方式。
    在这里插入图片描述
    这里如果缺少GsonHttpMessageConverter这个Bean的情况下,会使用默认的GsonHttpMessageConverter,所以如果想进行配置,就需要提供一个继承GsonHttpMessageConverter类的Bean,进行override。
@Configuration
public class HttpMessageConverterConfig {
    @Bean
    public GsonHttpMessageConverter gsonHttpMessageConverter(){
        GsonHttpMessageConverter converter
                = new GsonHttpMessageConverter();
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setDateFormat("yyyy/MM/dd");
        gsonBuilder.excludeFieldsWithModifiers(Modifier.PROTECTED);
        converter.setGson(gsonBuilder.create());
        return converter;
    }
}

显示效果。
在这里插入图片描述
日期格式按照重新定义的表示出来了,但是价格price没有按照预想隐藏。将这个属性设置成protected

@Data
public class Book {
    private String name;
    private String author;
    @JsonIgnore
    protected Float price; //设置成protected,期待隐藏前端表示
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date publicatationDate;
}

再次看看效果。OK!
在这里插入图片描述

2. 静态资源解析

  1. 静态资源默认定义在如下的地方。
public static class Resources {
		private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
		 "classpath:/META-INF/resources/",
		 "classpath:/resources/", 
		 "classpath:/static/", 
		 "classpath:/public/" };

maven工程中spring-boot-hello\demo\src\main\resources就是一个classpath,所以下面的路径都是静态资源的路径。
在这里插入图片描述
2. 放入图片到
spring-boot-hello\demo\src\main\resources\META-INF\resources目录。
在这里插入图片描述
之后访问,https://localhost:8080/river.png。
在这里插入图片描述
3. 自定义策略

  • 可以在application.properties里面直接定义静态资源的过滤规则和文件夹位置。
    spring.mvc.static-path-pattern=/static/**

如果在访问 https://localhost:8080/river.png,是不能访问的。
访问https://localhost:8080/static/river.png,是能够继续访问这个静态资源的。
在这里插入图片描述
由此可以看出,默认的情况下,静态资源的pattern是spring.mvc.static-path-pattern=/**,在修改成spring.mvc.static-path-pattern=/static/**的情况下,必须按照修改后来访问。

静态资源的路径也可以添加。

spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/my_static/

加入了这个classpath:/my_static/,但是本来默认路径还是都会变得无效。
在这里插入图片描述
4. 同样可以通过Java代码的方式进行配置。

  • 实现WebMvcConfigurer之后addResourceHandleraddResourceLocations进行自定义的配置。
@Configuration
public class CustomizedWebMvcConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){

        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/java_static/");
    }
}

我们依然可以访问http://localhost:8080/static/sunshine.png
但是原来的classpath:/static/river.png已经失效了,因为Java的配置覆盖了默认的设置。
在这里插入图片描述

  • 可以看出@Configuration注解,基本上spring boot的配置有两种方式。
    • 继承spring boot的接口,重写其中的方法。
      @Configuration
      public class CustomizedWebMvcConfigurer implements WebMvcConfigurer {
      
          @Override
          public void addResourceHandlers(ResourceHandlerRegistry registry){
      
              registry.addResourceHandler("/static/**")
                      .addResourceLocations("classpath:/java_static/");
          }
      }
      
    • 不继承spring boot的接口,但是在方法的注解上写明@Bean,之后返回spring boot的接口实现,或者配置类对象。
      @Configuration
      public class TomcatConfig {
          @Bean
          public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
              TomcatServletWebServerFactory tomcatServletWebServerFactory
                      = new TomcatServletWebServerFactory();
              tomcatServletWebServerFactory.addAdditionalTomcatConnectors(
                      createTomcatHttpConnector()
              );
              return tomcatServletWebServerFactory;
          }
          private Connector createTomcatHttpConnector(){
              Connector connector = new
                      Connector("org.apache.coyote.http11.Http11NioProtocol");
              connector.setScheme("http");
              connector.setPort(8081);
              connector.setSecure(false);
              connector.setRedirectPort(8080);
              return connector;
          }
      }
      
  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值