内容协商:根据Micronaut中的Accept标头进行路由

内容协商:根据Micronaut中的Accept标头进行路由,micronaut,Micronaut,在HTTP中,您可以定义一个Accept头来指定要检索的内容: curl --header "Accept: text/plain" localhost:8080/greetings/ curl --header "Accept: application/xml" localhost:8080/greetings/ 我想知道Micronaut的解决方案中是否有一个bult来处理这个问题 有一篇博客文章()描述了如何根据Accept标题生成不同的输出。但我觉得这不对,因为Micronaut中的大

在HTTP中,您可以定义一个
Accept
头来指定要检索的内容:

curl --header "Accept: text/plain" localhost:8080/greetings/
curl --header "Accept: application/xml" localhost:8080/greetings/
我想知道Micronaut的解决方案中是否有一个bult来处理这个问题

有一篇博客文章()描述了如何根据
Accept
标题生成不同的输出。但我觉得这不对,因为Micronaut中的大多数事情都是由注释处理的

我尝试使用
@Consumes(MediaType.TEXT\u PLAIN)
,但这只适用于POST请求(这很明显,因为Micronaut不会在GET请求中使用数据)。
@products(MediaType.TEXT_PLAIN)
注释似乎设置了
内容类型
标题并配置输出编码,但似乎与路由没有交互

@products(MediaType.APPLICATION\uXML)
@获取(“/”)
字符串getXml(){
返回“你好世界”;
}
@生成(MediaType.TEXT\u PLAIN)
@获取(“/”)
字符串getPlaintext(){
返回“你好世界”;
}
虽然我希望这会将带有
Accept:text/plain
的HTTP请求路由到getPlaintext(),并将
Accept:application/xml
路由到getXml(),但它导致传入请求的两个匹配项:

DEBUG i.m.h.s.netty.RoutingInBoundHandler-使用编解码器对发出的响应对象进行编码[超过1条路由与传入的请求匹配。以下路由与/Greeties/:GET-/Greeties,GET-/Greeties]匹配:io.micronaut.jackson.codec。JsonMediaTypeCodec@41ffaeb8


那么,是否有任何内置的解决方案可以根据HTTP请求的
接受头来路由HTTP请求?

路由目前不考虑接受头,但是路由会考虑
@消费头和
内容类型头。您可以使用相同URL的路由来接受不同的数据类型,并且将选择与内容类型匹配的路由


您可以在Github上创建一个问题,将其提交讨论。它可能已经在那里了,所以一定要先搜索

路由当前不考虑接受头,但是路由确实考虑了
@消费
内容类型
头。您可以使用相同URL的路由来接受不同的数据类型,并且将选择与内容类型匹配的路由


您可以在Github上创建一个问题,将其提交讨论。它可能已经在那里了,所以一定要先搜索

我认为这是不可能的。Micronaut路由仅通过uri匹配进行选择。关于这个问题进行了一些讨论。但是,
UriRouteMatch
仍然没有考虑到
MediaType
“仅通过uri匹配选择Micronaut路由。”-这是不正确的。uri是它的一部分,但请求动词也是它的一部分。。。您可以将
@Get(“/someuri”)
@Post(“/someuri”)
附加到不同的方法,Micronaut知道如何处理这些方法。这无助于回答上述问题的真正含义,但它确实解决了“Micronaut路由仅通过uri匹配选择”的问题。我希望这是有道理的。我认为那是不可能的。Micronaut路由仅通过uri匹配进行选择。关于这个问题进行了一些讨论。但是,
UriRouteMatch
仍然没有考虑到
MediaType
“仅通过uri匹配选择Micronaut路由。”-这是不正确的。uri是它的一部分,但请求动词也是它的一部分。。。您可以将
@Get(“/someuri”)
@Post(“/someuri”)
附加到不同的方法,Micronaut知道如何处理这些方法。这无助于回答上述问题的真正含义,但它确实解决了“Micronaut路由仅通过uri匹配选择”的问题。我希望这是有道理的。