java—如何实现用于编写类型化集合的自定义SpringHTTP消息转换器

1bqhqjot  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(357)

我有一个Spring启动控制器,它返回 List<Person> 我想实现一个习惯 HttpMessageConverter 可以编写类型为 Person .
我懂了 AbstractHttpMessageConverter ,但是 supports() 方法只接受一个类,所以我可以测试集合,但没有方法(据我所知)测试person类型的集合。
我也看到了 GenericHttpMessageConverter 以及 AbstractGenericHttpMessageConverter 这听起来很有希望,但我不知道如何正确实施。

kulphzqa

kulphzqa1#

我想我找到了解决办法。下面的方法似乎有效。。。

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

相关问题