Передайте несколько ключей в @Requestparam с одной строковой переменной - PullRequest
0 голосов
/ 06 января 2020

In this Image I have to search person by based on dropdown selection

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

Я не хочу вот так @RequestParam(value = "pname", required = false) String pName, @RequestParam(value = "ssn", required = false) String sSN)

Я хочу кое-что как это ( то есть несколько значений ключа с одной строковой переменной )

    public List<Patient> getPatientListLike(@RequestParam(required = false) String searchString)

Ответы [ 6 ]

2 голосов
/ 06 января 2020

Вы можете использовать что-то вроде этого

@PostMapping("/api/foos")
@ResponseBody
public String updateFoos(@RequestParam Map<String,String> allParams) {
    return "Parameters are " + allParams.entrySet();
}
curl -X POST -F 'name=abc' -F 'id=123' http://localhost:8080/api/foos
-----
Parameters are {[name=abc], [id=123]}

Пожалуйста, обратитесь сюда для подробностей https://www.baeldung.com/spring-request-param

0 голосов
/ 06 января 2020

Вы можете просто заменить параметр запроса String на параметр запроса Map<String, String>. ресурс

public List<Patient> getPatientListLike(@RequestParam(required = false) Map<String, String> searchParams)
0 голосов
/ 06 января 2020

RequestParam также сопоставляется с объектом. Не изобретайте способ обработки запросов и всегда следуйте лучшим принципам разработки API. Передайте параметры запроса так, как они предназначены, где все пары значений ключа разделены амперсандом.

GET /search?pname=name&ssn=123

Возможно, вам придется использовать конструктор с аннотациями Джексона, чтобы упростить его сортировку. Я предпочитаю публичные c поля в структурах данных.

class SearchParameters {
   private String pname;
   private String ssn;
   // getters-setters
}

@GetMapping("search")
public List<Patient> getPatientListLike(SearchParameters parameters)
0 голосов
/ 06 января 2020

Я думаю, вы можете изменить метод следующим образом:

public List<Patient> getPatientListLike(
    @RequestParam(required = false) String searchString,
    @RequestParam(required = false) String searchType
)

searchString - это текстовое поле представления, а searchType - это раскрывающееся значение представления.

0 голосов
/ 06 января 2020

Вы можете использовать запрос HttpServletRequest для получения строки запроса

public List<Patient> getPatientListLike(HttpServletRequest request) {

    String searchString = request.getQueryString();

}
0 голосов
/ 06 января 2020

Вы можете создать searchString как ssn = ssnValue (ssnValue, который пользователь выбирает на экране) в коде пользовательского интерфейса и передать его в URL.

...