自定义参数转换器:
实现WebMvcConfigurer的addFormatters方法
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new Converter<String, Pet>() {
@Override
public Pet convert(String source) {
if (!StringUtils.isEmpty(source)) {
String[] split = source.split(",");
Pet pet = new Pet();
pet.setName(split[0]);
pet.setAge(split[0]);
return pet;
}
return null;
}
});
}
自定义MessageConverter
第一步:创建一个类实现HttpMessageConverter接口
public class MyConverter implements HttpMessageConverter<Person> {
@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
return false;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return clazz.isAssignableFrom(Person.class);
}
@Override
public List<MediaType> getSupportedMediaTypes() {
return MediaType.parseMediaTypes("application/mytest");
}
@Override
public Person read(Class<? extends Person> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
return null;
}
@Override
public void write(Person person, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
String data=person.getUserName()+";"+person.getAge()+";"+person.getBirth();
OutputStream body = outputMessage.getBody();
body.write(data.getBytes());
}
}
第二步: 实现WebMvcConfigurer的extendMessageConverters方法
添加一个消息转化器
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyConverter());
}
内容协商:
用于给客户端传回那种数据格式
自定义媒体类型:基于请求参数(format)
第一种:
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.mediaType("mytest",new MediaType("application","mytest"));
}
第二种:yaml配置文件添加媒体类型
spring:
mvc:
contentnegotiation:
media-types: {mytest: "application/mytest"}