springboot自定义messageConverter

简介: springboot自定义messageConverter

如果想自定义传输数据的类型 需要设置自己的messageConverter

public class YanMessageConverter implements HttpMessageConverter {
    @Override
    public boolean canRead(Class clazz, MediaType mediaType) {
        return false;
    }
    @Override
    public boolean canWrite(Class clazz, MediaType mediaType) {
        return clazz.isAssignableFrom(Car.class);
    }
    @Override
    public List<MediaType> getSupportedMediaTypes() {
        MediaType mediaType = MediaType.parseMediaType("application/yan");
        ArrayList<MediaType> objects = new ArrayList<>();
        objects.add(mediaType);
        return objects;
    }
    @Override
    public Object read(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        return null;
    }
    @Override
    public void write(Object o, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        Car o1 = (Car) o;
        String data="hello "+((Car) o).getName()+" hello "+((Car) o).getPrice();
        OutputStream body = outputMessage.getBody();
        String s = new String(data.getBytes(), "UTF-8");
        System.out.println(s);
        body.write(s.getBytes("gbk"));//避免乱码
    }
}


@Import(User.class)
@Configuration(proxyBeanMethods = true)
@EnableConfigurationProperties(Car.class)
//proxyBeanMEthods
// 设置为false意味着跳过扫描容器的步骤,直接new一个新的组件而不是使用容器中的组件
public class MyConfiguration implements WebMvcConfigurer {
    @Bean
    @ConditionalOnClass(name = "Pet")
    public User getUser(){
        return new User("yan",18,getPet());
    }
    //@Bean("tom")
    public Pet getPet(){
        return new Pet("tom");
    }
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
//自定义转换器,转换自定义的字符串格式
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new Converter<String, Pet>() {
            @Override
            public Pet convert(String source) {
                String[] split = source.split(",");
                return new Pet(split[0]);
            }
        });
    }
  //如果想把自定义的类型也融入到参数内容协商里面去
  //需要重写内容协商配置类
  //注意:这里会覆盖所有的映射
  //所以我们需要自己添加映射 
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        //configurer.strategies();
        HashMap<String, MediaType> stringMediaTypeHashMap = new HashMap<>();
        stringMediaTypeHashMap.put("xml",MediaType.APPLICATION_XML);
        stringMediaTypeHashMap.put("json",MediaType.APPLICATION_JSON);
        stringMediaTypeHashMap.put("yan",MediaType.parseMediaType("application/yan"));
        //参数响应
        ParameterContentNegotiationStrategy parameterContentNegotiationStrategy = new ParameterContentNegotiationStrategy(stringMediaTypeHashMap);
        //若想基于头的响应 则应该增加策略
        HeaderContentNegotiationStrategy headStrategy=new HeaderContentNegotiationStrategy();
        configurer.strategies(Arrays.asList(parameterContentNegotiationStrategy,headStrategy));
    }
  //添加自定义messageConverter
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new YanMessageConverter());
    }
}
相关文章
|
7月前
|
Java 微服务
【SpringBoot】SpringBoot工程 自定义配置文件
【SpringBoot】SpringBoot工程 自定义配置文件
69 0
|
6月前
|
XML JSON Java
SpringBoot(四)之基础配置
application.yml为主配置文件,如果要分环境,则需要创建 application-{profile}.yml的环境配置。
42 0
|
7月前
|
Java
Springboot自定义Stater
Springboot自定义Stater
|
7月前
|
Java Spring 容器
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
50 0
|
7月前
|
XML Java Maven
SpringBoot的创建和使用
SpringBoot的创建和使用
140 0
SpringBoot的创建和使用
|
7月前
|
Java
SpringBoot获取配置中的数据
SpringBoot获取配置中的数据
68 0
|
Java
springboot中自定义配置
springboot中自定义配置
41 0
|
Java 数据库
SpringBoot-8-属性配置
SpringBoot-8-属性配置
76 1
|
Java 测试技术 Maven
SpringBoot的创建和使用(下)
SpringBoot的创建和使用(下)
|
Java Spring
SpringBoot的创建和使用(中)
SpringBoot的创建和使用(中)