Spring中使用@GetMapping时,如何向网页传递多个对象数据?
问题分析与解决
你遇到的问题核心很明确:两次调用model.addAttribute时用了同一个key dev_apis,后添加的String数组会直接覆盖之前存入的List<DevApiDto>集合——这是Spring Model的特性,同一个key对应的值会被后续的赋值操作覆盖。
解决步骤
只需要给不同的数据分配不同的key,就能让两个数据同时存在Model中,前端页面也能分别获取到:
修改后的代码
@GetMapping("/dev_apis") public String dev_apis(Model model){ // 存入接口列表,使用专属key List<DevApiDto> devApis = devApiServiceImpl.findAllDevApis(); model.addAttribute("devApis", devApis); // 存入状态选项数组,使用新的key String[] statusOptions = new String[5]; statusOptions[0] = "default"; statusOptions[1] = "pending"; statusOptions[2] = "in operation"; statusOptions[3] = "suspended"; statusOptions[4] = "terminated"; model.addAttribute("statusOptions", statusOptions); return "dev_apis"; }
额外优化建议
- 不要直接修改从
devApiServiceImpl.getStatusArray()获取的数组(如果该数组是全局复用的实例,会导致其他业务场景的数据被污染),建议直接新建数组,或者用Map<Integer, String>存储状态码与文本的映射,逻辑更直观:
Map<Integer, String> statusMap = new HashMap<>(); statusMap.put(0, "default"); statusMap.put(1, "pending"); statusMap.put(2, "in operation"); statusMap.put(3, "suspended"); statusMap.put(4, "terminated"); model.addAttribute("statusMap", statusMap);
- 后续做多语言本地化时,建议把这些状态文本放到
messages.properties(对应多语言版本如messages_zh_CN.properties)配置文件中,通过Spring的MessageSource组件动态获取,避免硬编码。
内容的提问来源于stack exchange,提问作者mycowan
相关产品推荐
相关产品推荐

