micronaut - как принимать любое содержание и тело запроса

Я пытаюсь написать конечную точку микронавта, которая потребляет любой тип контента и получает необработанное тело запроса, и я столкнулся с несколькими проблемами:

  1. Как написать конечную точку, например, если запрос будет перенаправлен на нее независимо от типа содержимого? (по умолчанию micronaut потребляет приложение / json)
  2. Как прочитать тело такого запроса?

Я пробовал следующее:

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

person fabien    schedule 12.11.2019    source источник


Ответы (1)


Подстановочный знак был проблемой, я смог заставить обработчик №1 работать с HttpRequest<String>:

@Post("/one")
public String one(HttpRequest<String> req) { ...

но обработчик по-прежнему не принимает запросы с любым типом содержимого, несмотря на consumes="*/*". Я отправил в проект проблему: https://github.com/micronaut-projects/micronaut-core/issues/2334

person fabien    schedule 13.11.2019