Как получить неизвестный параметр запроса в @RequestParam SpringBoot - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь реализовать редактор данных с весенней загрузкой, но данные от клиента к серверу различаются для создания, обновления и удаления, даже не постоянные для создания, и зависят от полей, которые я реализовал до сих пор

@RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
            @ResponseBody
            public String datatabledata(HttpServletRequest request)
            {
                Enumeration<String> params = request.getParameterNames(); 
                while(params.hasMoreElements()){
                 String paramName = params.nextElement();
                 System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
                }
                //System.out.println(data);
                //System.out.println(request.);
                //Map<String,String>ak=new HashMap<>();
                //ak.put("data", "hello ");
                return "done";
            }

Над кодом выводится следующий вывод на консоль для создания

Parameter Name - action, Value - create
Parameter Name - data[0][username], Value - dddddd
Parameter Name - data[0][date], Value - 2018-11-28
Parameter Name - data[0][balance], Value - dddddddddd

и для редактирования

Parameter Name - action, Value - edit
Parameter Name - data[5bfab595507af613f409c0c4][username], Value - four
Parameter Name - data[5bfab595507af613f409c0c4][date], Value - 2018-11-25
Parameter Name - data[5bfab595507af613f409c0c4][balance], Value - 9000.0

Единственным постоянным параметром здесь является действие, поэтому я могу использовать

@RequestParam("action")

а как получить данные об отдыхе ??что-то вроде @RequestParam() String data

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Я вижу, что здесь мы должны использовать REST более богатым способом.

Итак, создайте три различных метода обработки контроллера, создавайте, обновляйте и удаляйте и сопоставляйте их с различными методами HTTP, как показано ниже:

//For Create. Take the parameter as (@RequestBody List<User>)
@RequestMapping(value="/datatabledata" , method=RequestMethod.POST) 
//For Update/Edit, Take the parameter as (@RequestBody List<User>)
@RequestMapping(value="/datatabledata" , method=RequestMethod.PUT)
//For Delete, Just take either list of ids or id to be delete. Nothiing else required 
@RequestMapping(value="/datatabledata" , method=RequestMethod.DELETE)

Теперь вам не нужно action в качестве параметра.Клиенту просто нужно указать правильный http метод.

0 голосов
/ 28 ноября 2018

Вы должны использовать @RequestParam Map<String,String> allRequestParams в своей конечной точке:

@RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
@ResponseBody
public String datatabledata(@RequestParam Map<String,String> allRequestParams) {
   / ... rest of your code
}
0 голосов
/ 28 ноября 2018

Вы можете создать класс DTO, который может быть отображен из запроса и может использоваться в дальнейшем.

        @RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
        @ResponseBody
        public String datatabledata(HttpServletRequest request)
        {
            UserDTO object = new ObjectMapper().setDateFormat(simpleDateFormat).readValue(request.getReader(), UserDTO.class);
            performYourOperation(object);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...