Я пытаюсь написать конечную точку микронавта, которая потребляет любой тип контента и получает необработанное тело запроса, и я столкнулся с несколькими проблемами:
- Как написать конечную точку, например, если запрос будет перенаправлен на нее независимо от типа содержимого? (по умолчанию micronaut потребляет приложение / json)
- Как прочитать тело такого запроса?
Я пробовал следующее:
@Controller(value = "/test", consumes = "*/*")
public class MyController {
@Post("/one")
public String one(HttpRequest<?> req) {
// req.getHeaders() returns expected headers
// req.getParameters() seems to be fine
// req.getBody(...) always return null regardless of which getBody method I use. I used the debugger to study what `req` contains and saw the underlying netty content appears empty
}
@Post("/two")
public String two(HttpHeaders headers, HttpParameters params, @Body Object value) {
// headers & params are good
// body gives me a CompositeByteBuf... I find it surprising micronaut "leaks" the underlying netty bytebuf to the higher level impl
}
}
Несколько замечаний:
- Я могу попасть в эти конечные точки, только если я пропущу
-H "Content-Type: */*"
в моем локоне. Я бы хотел, чтобы эти конечные точки были доступны независимо от значенияContent-Type
. - Первый обработчик не показывает тела, а второй показывает, что есть тело для того же запроса (только указывает на другой путь). Я бы также предпочел реализовать свой обработчик, например обработчик №1.