美文网首页
Spring实现之HttpMessageConverter

Spring实现之HttpMessageConverter

作者: 刘军颖 | 来源:发表于2019-05-26 19:08 被阅读0次

Spring实现之HttpMessageConverter

因为给朋友些教程,我就在想写点啥,能够慢慢的,不经意间,叫他学会JAVA,他和我一样都是其他语言过来的,我不希望他只是做添加删除那样低级而无味的事情,我就在想以至于今天到现在没有憋出来一个教程,当我看我写的源码的时候我突然想到了,昨天我使用了一个文本原样输出,@ResponseBody,今天咱们就学学这个的根基。

我们平时做项目的时候经常碰见XMLJSON格式,这些格式spring是如何支持的,估计很多小伙伴不知道,或者曾经知道吧!不管什么语言我觉得好奇心是好的,应该有足够的好奇心没有学不会的东西。

目前市面常见类型

常见Http类型

看着这么多风骚的类型,我们是不是实现一个类型?下边我们实现一个application-liujunying

实现自定义响应步骤

①继承AbstractHttpMessageConverter

②实现supports,readInternal,writeInternal

③注册自己实现的类

编写自定义类型

AbstractHttpMessageConverter继承与HttpMessageConverter他帮助我们接收处理以及输出数据。

package com.haojishu.demo.messageconverter;

import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.util.StreamUtils;

import com.haojishu.demo.domain.Sulwan;

public class SulwanMessageConverter extends AbstractHttpMessageConverter<Sulwan>{

    @Override
    protected boolean supports(Class<?> clazz) {
        return Sulwan.class.isAssignableFrom(clazz);
    }

    @Override
    protected Sulwan readInternal(Class<? extends Sulwan> clazz, HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException {
        String temp = StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("UTF-8"));
        return new Sulwan(temp);// 在实现逻辑哪里去输出你想要的形状
    }

    @Override
    protected void writeInternal(Sulwan t, HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {
            // 这里去实现要返回的逻辑
    }

    public SulwanMessageConverter() {
        super(new MediaType("application", "x-sulwan", Charset.forName("UTF-8")));
    }


}

注册你的类型

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(converter());
    }
    
    @Bean
    public SulwanMessageConverter converter() {
        return new SulwanMessageConverter();
    }

使用自定义类型

    @RequestMapping(value="/convert", produces = {"application/x-sulwan"})
    @ResponseBody
    public Sulwan convert(@RequestBody String useranme) {
        return new Sulwan(useranme);
    }

到底干啥用的

这个是从响应类型层面去处理你的东西,我们比如输出JSON类型给APP的时候经常使用的FASTJSON就是用这个机制实现的,当然我们说我们也可以直接封装到一个实体类,完后返回也是可以的,或者使用AOP环通知也是可以实现的,那些我们下次讲解!

相关文章

网友评论

      本文标题:Spring实现之HttpMessageConverter

      本文链接:https://www.haomeiwen.com/subject/nopftctx.html