@RequestParam со списком параметров - PullRequest
0 голосов
/ 06 августа 2020

Цель состоит в том, чтобы отправить HTTP-запрос GET, содержащий список строк, представляющих значения перечисления QuestionSubject, а затем использовать эти параметры для выбора вопросов нужной темы. Я также добавил специальный конвертер для преобразования полученной строки в мое перечисление. Моя проблема в том, что "subject" всегда имеет значение null, когда я отлаживаю внутри метода.

Это моя текущая конечная точка REST:

@ResponseBody
@GetMapping(path = "question/getquestionsbysubjects")
public List<Question> loadQuestionsBySubjects(@RequestParam(required=false) QuestionSubject[] subjects) throws IOException, GeneralSecurityException {
   if(subjects == null || subjects.length == 0){
       return this.loadAllQuestions();
   }
   return questionRepository.findByQuestionSubjectIn(Arrays.asList(subjects));
}

Я могу получить свои вопросы при передаче одного субъект в методе со следующей подписью:

public List<Question> loadQuestionsBySubjects(@RequestParam(required=false) QuestionSubject subject)

Таким образом, это не похоже на проблему преобразования строки в enum.

Я пытался отправить несколько запросов, но субъекты всегда имеет значение NULL в конечной точке. Вот что я уже пробовал использовать почтальоном:

http://localhost:8080/question/getquestionsbysubjects?subjects=contacts,ko
http://localhost:8080/question/getquestionsbysubjects?subjects=["contacts", "ko"]
http://localhost:8080/question/getquestionsbysubjects?subjects=contacts&subjects=ko

Есть ли проблема, о которой я не знаю? Кажется, они работают в том, что я нашел в других вопросах.

Вот конвертер:

public class StringToQuestionSubjectConverter implements Converter<String, QuestionSubject> {
   @Override
   public QuestionSubject convert(String source) {
     return QuestionSubject.valueOf(source.toUpperCase());
   }

   public Iterable<QuestionSubject> convertAll(String[] sources) {
     ArrayList<QuestionSubject> list = new ArrayList<>();
        for (String source : sources) {
            list.add(this.convert(source));
        }
     return list;
    }
}

1 Ответ

2 голосов
/ 06 августа 2020

Используйте List напрямую:

@RequestParam(required=false) List<QuestionSubject> subjects

return questionRepository.findByQuestionSubjectIn(subjects);
...