美文网首页
springboot+mybatis框架搭建--3. Messa

springboot+mybatis框架搭建--3. Messa

作者: 小狼在IT | 来源:发表于2019-02-15 16:50 被阅读0次

spring boot本身就可以将对象转换为json返回,使用MessageConverter的目的,是想让对象转换为json返回的同时,在返回前做一些处理动作。如果没这个需要,可以不加这个设置。

1.引入fastjson(我选用fastjson):

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.31</version>
    </dependency>

2.增加资源文件用作国际化警告信息


image.png

3.增加标准信息返回类(这个返回信息很重要,几乎所有功能返回给浏览器的,都是这个类)

public interface ResultCode  {

    int SUCCESS = 0;
    int FAIL = 1;
}
    public class ResultDto<T> implements Serializable {
        private static final long serialVersionUID = -1L;
        private Integer code;
        private String msg;
        private T data;
    
        public ResultDto() {
        }
    
        public ResultDto(Integer code) {
            this(code, "", null);
        }
    
        public ResultDto(Integer code, T data) {
            this(code, "", data);
        }
    
        public ResultDto(Integer code, String msg) {
            this(code, msg, null);
        }
    
        public ResultDto(Integer code, String msg, T data) {
            this.code = code;
            this.msg = msg;
            this.data = data;
        }
    
        public Integer getCode() {
            return this.code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getMsg() {
            return this.msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return this.data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        @Override
        public String toString() {
            return JSON.toJSONString(this);
        }
    }

4.创建messageConvert类:

    public class MessageConverter extends FastJsonHttpMessageConverter {
    
        public MessageConverter() {
            super();
        }
    
        @Autowired
        private MessageSource messageSource;
    
        @Override
        protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException,
                HttpMessageNotWritableException {
            if (obj instanceof ResultDto) {
                ResultDto result = (ResultDto) obj;
                if (StringUtils.isBlank(result.getMsg())) {
                    //如果没有msg,就根据code去找标准msg返回
                    result.setMsg(
                            //到messages_zh_CN.properties获取信息
                            messageSource.getMessage(
                                String.valueOf(result.getCode()),
                                new Object[]{},
                                Locale.SIMPLIFIED_CHINESE)
                    );
                }
                super.writeInternal(result, outputMessage);
            } else {
                super.writeInternal(obj, outputMessage);
            }
    
        }
    }

5.配置bean:

    @Configuration
    public class MessageBean {
        @Bean("messageSource")
        public ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource(){
            ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
            reloadableResourceBundleMessageSource.setBasenames("classpath:i18n/messages/messages");
            reloadableResourceBundleMessageSource.setUseCodeAsDefaultMessage(false);
            reloadableResourceBundleMessageSource.setDefaultEncoding("UTF-8");
            reloadableResourceBundleMessageSource.setCacheSeconds(60);
            return reloadableResourceBundleMessageSource;
        }
    
        @Bean
        public MessageConverter messageConverter(){
            MessageConverter messageConverter = new MessageConverter();
            //fastjson配置
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,
                    SerializerFeature.WriteNullStringAsEmpty,
                    SerializerFeature.DisableCircularReferenceDetect);
            fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
            //处理中文乱码问题
            List<MediaType> fastMediaTypes = new ArrayList<>();
            fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            //在convert中添加配置信息.
            messageConverter.setSupportedMediaTypes(fastMediaTypes);
            messageConverter.setFastJsonConfig(fastJsonConfig);
            return messageConverter;
        }
    }

运行:


image.png
image.png

如果注释掉 MessageBean类的messageConverter,那请求的信息返回时,就不会经过MessageConverter类,所得结果如下:


image.png

看起来也还行。所以配不配制这个MessageConver,看你们自己项目情况而定。

相关文章

网友评论

      本文标题:springboot+mybatis框架搭建--3. Messa

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