spring-boot - @RequestParam 带有参数列表
问题描述
目标是发送一个 HTTP GET 请求,其中包含表示枚举值 QuestionSubject 的字符串列表,然后使用这些参数选择正确主题的问题。我还添加了一个自定义转换器来将接收到的字符串转换为我的枚举。我的问题是,当我在方法中进行调试时,“主题”始终为空。
这是我当前的 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
.
我尝试发送多个请求,但端点中的主题始终为空。这是我已经尝试过使用邮递员的方法:
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;
}
}
解决方案
直接使用List
:
@RequestParam(required=false) List<QuestionSubject> subjects
return questionRepository.findByQuestionSubjectIn(subjects);
推荐阅读
- excel - 溢出二进制到十进制函数
- python - pyomo 的准确性;客观规则不返回预期值
- xml - 如何解析文件夹中的 XML 文件以映射字符串、列表
- sql - 如何将行中的多个值标记到单个列?
- sql - SQL-server 简单插入语句非常慢 - 列存储索引的全扫描
- google-chrome - 无法从 RTCPeerConnection 获取 IP V4 地址 - chrome
- arrays - 在本机反应中从数组中删除数据
- node.js - 当我以相同的顺序使用 values(a,b) 传递 a,b 时,如何将 [ab] 作为我的输出?
- android - gradle 未解决的依赖
- python - Pytorch 中的批量矩阵乘法 - 对输出维度的处理感到困惑