Получить PathVariables, RequestParams, RequestBody в сервисе

Я хочу получить все параметры (не нужны заголовки) из httpRequest в компоненте службы spring

Я использую Spring boot, посмотрите на этот пример:

private final MyService myService;

@RequestMapping(value = "/processform/{process_id}", method = RequestMethod.POST)
    public @ResponseBody
    LinkedHashMap<String, String> runForm( String process_id,
                                               @RequestParam String className,
                                               @RequestBody(required = false) IupicsFormVO vo) {
        return myService.run(process_id, className, vo);
    }

Этот контроллер генерирует этот завиток (без заголовков):

curl -X POST \
  'http://localhost:8087/processform/119?className=com.stackOverflow.question.ClassName.java' \
  -d '{  
"name" : "Name",
"age" : "Age"
}'

Теперь мне нужно получить все параметры из этого URL-адреса (может быть, с внедрением HttpServletRequest)

Ожидаемый результат примерно такой:

{  
   "process_id":"119",
   "className":"com.stackOverflow.question.ClassName.java",
   "body":{  
      "name":"Name",
      "age":"Age"
   }
}

Я нашел пример это,

String finalPath = apm.extractPathWithinPattern(bestMatchPattern, path

но когда я использую его, я всегда получаю пустой finalPath Спасибо за ваше время

Почему ты не можешь его использовать? Просьба уточнить

Lino 12.02.2019 10:45

всегда получал пустую finalString

satck djallil 12.02.2019 10:57

Уточните, пожалуйста, в чем проблема. Что вам нужно извлечь из пути? Если есть какие-то дополнительные параметры (с ?name=value) просто укажите их с @RequestParam

cmoetzing 12.02.2019 12:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
1 478
2

Ответы 2

Вам нужно поместить переменную в путь, чтобы использовать @PathVariable. Например:

@RequestMapping(value = "/processform/{id}", method = RequestMethod.POST)
public @ResponseBody
LinkedHashMap<String, String> runForm(@PathVariable("id") String process_id, ...

это не шляпа, которую я хочу, контроллер работает нормально, я просто забыл его скопировать, я обновлю свой вопрос, но я хочу позже получить эту информацию из HTTPRequest

satck djallil 12.02.2019 11:42

Ваш путь должен иметь заполнитель переменной пути. /processform/{process_id}. Также нужно указать request parameter

@RequestMapping(value = "/processform/{process_id}", method = RequestMethod.POST)
    public @ResponseBody
    LinkedHashMap<String, String> runForm(HttpServletRequest request, @PathVariable("process_id") String process_id, @RequestParam("name") String lassName,@RequestParam("age") String age,
                                               @RequestBody(required = false) IupicsFormVO vo) {
        return myService.run(process_id, className, vo);
    }

Для получения более подробной информации о Переменная пути и параметр запроса вы можете ознакомиться с этим руководством.

Обновлено: Если вы хотите получить эти атрибуты из запроса, то первым параметром в вашем методе контроллера будет HttpServletRequest request. Передайте параметр request в свою службу, и там вы сможете использовать request.getParameter("paramName") и request.getAttribute("attributeName") для доступа к значениям.

это не шляпа, которую я хочу, контроллер работает нормально, я просто забыл его скопировать, я обновлю свой вопрос, но я хочу позже получить эту информацию из HTTPRequest

satck djallil 12.02.2019 11:42

Другие вопросы по теме