springboot学习(四) 继承AbstractHttpMessageConverter自定义转换器发送properties数据和byte[]数据

继承AbstractHttpMessageConverter自定义转换器发送properties数据和byte[]数据

自定义Properties转换器

  1. 依赖包等引入见上篇。
  2. 定义PropertiesHttpMessageConverter类继承抽象类AbstractHttpMessageConverter。自定义一个application/properties+user
package com.zqw.springboot.learn.boot.config;

import com.zqw.springboot.learn.boot.domain.User;
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 java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.Properties;

public class PropertiesHttpMessageConverter extends
        AbstractHttpMessageConverter<User> {
    public PropertiesHttpMessageConverter() {
        super(MediaType.valueOf(Constants.PROPERTIES_USER));
        setDefaultCharset(Charset.forName("utf-8"));
    }

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

    @Override
    protected User readInternal(Class<? extends User> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        InputStream is = inputMessage.getBody();
        Properties props = new Properties();
        props.load(is);
        String id = props.getProperty("id");
        String name = props.getProperty("name");
        User user = new User();
        user.setId(id);
        user.setName(name);
        return user;
    }

    @Override
    protected void writeInternal(User user, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        OutputStream os = outputMessage.getBody();
        Properties properties = new Properties();
        properties.setProperty("id", user.getId());
        properties.setProperty("name", user.getName());
        properties.store(os, "user comments");
    }
}

3.自定义WebMvcConfigurer

package com.zqw.springboot.learn.boot.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/*
* 添加Properties转换
* */
@Configuration
public class WebConfig1 implements WebMvcConfigurer {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new PropertiesHttpMessageConverter());
        converters.add(new BytesHttpMessageConvert());
//        converters.set(0, new BytesHttpMessageConvert());
    }
}

4.定义 json2prop或者prop2json接口,produces 对应请求header的Accept, consumers 对应header的Content-Type

package com.zqw.springboot.learn.boot.web;

import com.zqw.springboot.learn.boot.config.Constants;
import com.zqw.springboot.learn.boot.domain.User;
import com.zqw.springboot.learn.boot.utils.MathUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.Random;

@RestController
public class UserController {
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable String id){
        User user = new User();
        user.setId(id);
        return user;
    }
    /*将json转为properties*/
    @PostMapping(value = "/user/json2prop",
                consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE},
                produces = {Constants.PROPERTIES_USER})
    public User json2prop(@RequestBody User user){
        return user;
    }
    /*将properties转为json*/
    @PostMapping(value ="/user/prop2json",
                consumes = {Constants.PROPERTIES_USER},
                produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public User prop2json(@RequestBody User user){
        return user;
    }




}

自定义byte[]转换器可见github源码,其中前台解析代码见static下test.html

github源码
springboot学习 上一篇 Rest自定义转换器messageConverters返回XML格式数据
springboot学习 下一篇 springboot添加拦截器

猜你喜欢

转载自blog.csdn.net/u011943534/article/details/80790518