继承AbstractHttpMessageConverter自定义转换器发送properties数据和byte[]数据
自定义Properties转换器
- 依赖包等引入见上篇。
- 定义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添加拦截器