首页 > 解决方案 > 如何实现自定义 Spring Http 消息转换器以编写类型化集合

问题描述

我有一个返回 a 的 Spring Boot 控制器,List<Person>我想实现一个HttpMessageConverter可以编写类型集合的自定义Person

我明白AbstractHttpMessageConverter了,但是该supports()方法只需要一个类,所以我可以测试 Collection,但没有办法(据我所知)测试 Person 类型的 Collection。

我也看到了GenericHttpMessageConverterAbstractGenericHttpMessageConverter这听起来很有希望,但我无法弄清楚如何正确实施。

标签: javaspring-bootspring-restcontrollerspring-rest

解决方案


我想我找到了解决办法。以下似乎工作......

@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
}

推荐阅读