MessageBodyWriter最适合Variant

时间:2017-03-03 18:28:06

标签: rest java-ee jax-rs

MessageBodyWriter.writeTo方法包括MediaType mediaTypeMultivaluedMap<String,Object> httpHeaders

mediaType应该是最合适的输出格式,但如果包含多个Accept标头值(即application/xml, q=0.5; application/json, q=0.9),它是如何被选中的。

此外,如何选择最佳变体(语言等)?使用Request.selectVariant()可以自动执行,但我还没有找到如何在MessageBodyWriter内完成此操作。

由于

1 个答案:

答案 0 :(得分:0)

  

此外,如何选择最佳变体(语言等)?

这实际上取决于实施。

  

但我还没有在MessageBodyWriter

中找到如何做到这一点

因为MessageBodyWriter.writeTo并不真正关心选择最佳变体。在检查了一些实现之后,例如StringProviderSerializableProviderFormMultivaluedMapProvider,似乎很清楚他们只是接受输入,并以其重新格式将其写入输出流:作为字符串,作为序列化对象或表单编码字符串。他们只使用mediaType作为他们应该使用的字符编码等细节。

因此,在选择使用过的MessageBodyWriter实现之前,必须决定最合适的输出格式。 StringProvider始终只输出字符串,并且如果它是JSON字符串或XML字符串或其他内容,则无需关心。