Как получить доступ к параметрам URL при весенней загрузке - PullRequest
0 голосов
/ 03 декабря 2018

Мой запрос, как показано ниже: -

http://example.com:8984/service/response?q=bags&source=desktop.search&city.data=mumbai|delhi

Как я могу получить доступ к этим значениям из URL, чтобы я получил карту ниже: -

{
q => bags,
source => desktop.search,
city.data => [mumbai, delhi]
}

я написалниже программы: -

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class serviceController {

    @RequestMapping("/service/response")

    String getSearchString(@RequestParam Map<String, String> params) {
        return "SearchString ---- "+params;
    }
}

Работает нормально, когда я задаю только 1 параметр в city.data = mumbai, но получаю ошибку ниже, когда я даю city.data = mumbai | delhi

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
    at java.base/java.lang.Thread.run(Thread.java:844) [na:na]

Пожалуйста, предложите правильный путь?заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я думаю, вы можете попробовать вот так.

@RequestMapping(value = "/test")
@ResponseBody
public void test(@RequestParam Map<String,String> param) {
    String[] city = org.springframework.util.StringUtils.split(param.get("city.data"), "|");
    System.out.println(Arrays.toString(city));
    System.out.println(param);
}

Если у вас есть только несколько параметров, вы также можете попробовать вот так. Но URL запроса должен быть изменен следующим образом. test2? Q = bags & source = desktop.search & city.data = mumbai & city.data = delhi

@RequestMapping(value = "/test2")
@ResponseBody
public void test2(String q, String source, @RequestParam(value = "city.data") String[] city) {
    System.out.println(Arrays.toString(city));
    System.out.println(source);
    System.out.println(q);
}
0 голосов
/ 03 декабря 2018

Я бы порекомендовал вам отправлять параметры другим способом, но если вам нужен символ конвейера, вы должны заменить его на код %7C.Следовательно, если вы хотите добавить city.data=mumbai|delhi в качестве параметра, вы должны заменить его на city.data=mumbai%7Cdelhi.

После этого вы можете проанализировать параметр в этом поле, используя методы String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...