java - 如何实现自定义 Spring Http 消息转换器以编写类型化集合
问题描述
我有一个返回 a 的 Spring Boot 控制器,List<Person>
我想实现一个HttpMessageConverter
可以编写类型集合的自定义Person
。
我明白AbstractHttpMessageConverter
了,但是该supports()
方法只需要一个类,所以我可以测试 Collection,但没有办法(据我所知)测试 Person 类型的 Collection。
我也看到了GenericHttpMessageConverter
,AbstractGenericHttpMessageConverter
这听起来很有希望,但我无法弄清楚如何正确实施。
解决方案
我想我找到了解决办法。以下似乎工作......
@Component
static class PersonMessageConverter
extends AbstractGenericHttpMessageConverter<Collection<Person>> {
public PersonMessageConverter() {
super(MediaType.APPLICATION_JSON);
}
@Override
public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType) {
TypeToken<Collection<Person>> personCollectionType = new com.google.common.reflect.TypeToken<>() {};
return canWrite(mediaType) && personCollectionType.isSupertypeOf(type);
}
@Override
protected void writeInternal(Collection<Person> persons, Type type, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
// do write...
}
// continue with read methods here
}
推荐阅读
- apache-spark - Spark-sql parquet 压缩设置似乎不起作用
- python - “^c”以外的快速复制
- xml - 甲骨文集合
- azure - 如何避免多个 azure B2C 用户会话
- javascript - 在chrome上打开问题后,物化日期选择器自动隐藏
- javascript - JavaScript 从网络路径获取图像
- javascript - 通过javascript函数导入文本
- javascript - 如何通过 Discord Bot 让 Webhook 说话(循环)
- vb.net - VB.NET 服务器不接收来自远程客户端的连接请求
- php - 如何防止为在 Laravel 中同时处理的请求创建多个条目