Spring mvc配置消息转换器
配置消息转换器
配置FastJson转换器
- 
选择一个配置文件类实现WebMvcConfigurer 
- 
重写configureMessageConverters方法注册添加消息转换器,需要配置UTF-8格式。 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); // FastJsonConfig fastJsonConfig = new FastJsonConfig(); List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); converter.setSupportedMediaTypes(fastMediaTypes); converters.add(converter); } @Autowired public SpringMvcConfig(UserController u){ }
钩子方法
父类定义一个模版方法,即方法中没有内容,但是有参数,子类重写方法,此时使用多态赋值父类,父类调用钩子方法,通过方法参数就能钓到子类运行后的值,本质就是地址里的值改变了,地址其实没有变,钩子里有个小参数诱饵但是经过执行后,钓到了大的鱼,即将其附上了其他值。对于spirng中就是容器实例化的自动注入,实现多态,然后钩子调用。
- 父类,但是方法上加了@Bean 此时如果IOC容器中有子类实例,则会多态自动注入到this中, 通过System.out.println(this);以及通过一个Controller类自动注入实现类,然后输出地址,你会发现其实是一个地址,也就是此时this其实就是其容器里注册后子类实例,然后spirng启动后会扫描执行该方法,此时容器是没有该类实例,只有实现类实例。
public  class Student {
    private String name;
    private int age;
    @Bean
    public void beanTest(){
        List<Integer>ss =new ArrayList<>() ;
        this.hook(ss);
        //ss相对于鱼饵
        System.out.println(this);
        //此时ss变成了大鱼,因为里面有东西了。
        System.out.println("勾中了"+ss.toString());
    }
	//钩子方法
    public void hook(List<Integer> s){
        System.out.println(name);
    }
    //有参构造
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}- 
子类,类上加了Componet注解,告诉容器要创建实例,然后重写了钩子方法,同时s加上了1。 @Component public class MyTest extends Student { private String name; private int age; public MyTest() { super("123",10); this.name ="ssss"; this.age =30; } @Override public void hook(List<Integer> s) { s.add(1); System.out.println("重写了"); } }
- 
输出结果  而此时的自动注入的输出为:(具体代码不放了,应该都会)  可以发现实现了钩子功能,钓上了1。这就是钩子方法,其实原理就是多态然后方法内值改了,不过记住前提地址不能变,否则达不到效果,因为spring的注解+IOC容器原理,所以我们会理解不了。 
@EnableWebMvc注解
注解
注解
注解为特殊标记,用于告诉程序如何执行
自定义注解
public @interface a{
    public String name() default 默认值;//将方法作为属性。
    String value();//特殊属性,即默认属性,即如果就只有一个value属性,则使用注解时无需指定value,默认赋值给value,注:此时的只有一个value属性,不仅代表注解只有一个value,如果注解有多个属性,但是多个属性都有默认值的话,则value属性也是可以不用写(value有默认值也是可以)。
        
}元注解
注解注解的注解😏,第一个注解为动词,后面两个为名词。
- @Retention() 声明注解作用时机,即保留周期
- RetentionPolicy枚举类
- SOURCE 只作用源码阶段,字节码文件中不存在。
- CLASS(默认值)存在于源码与class文件中,但是运行时消失。
- RUNTIME 一直到运行时都存在。
 
 
- RetentionPolicy枚举类
- @Target() 声明注解作用位置
- ElementType 枚举类
- TYPE 类,接口
- FIELD, 成员变量
- METHOD, 成员方法
- PARAMETER, 方法参数
- CONSTRUCTOR, 构造器
- LOCAL_VARIABLE ,局部变量
 
 
- ElementType 枚举类
