内容协商:根据Micronaut中的Accept标头进行路由
在HTTP中,您可以定义一个内容协商:根据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中的大
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匹配选择”的问题。我希望这是有道理的。