【发布时间】:2021-02-07 16:26:34
【问题描述】:
[解决了! 代码中体现的解决方案]
我正在使用 Spring Boot 开发一个项目,我需要 在 JSON 中包含对象组的数组。它应该看起来像这个例子:
{
"Spring20": [
{
"CSCXXX": "Machine Learning",
. . .
},
{
"CSCXXX": "Computer Vision",
. . .
}
],
"Fall20": [
{
"EEXXX": "Electronics",
. . .
}
]
}
我尝试使用一个 Map 来存储 Array 主题名称的 String 和一个 List 来保存所有类对象。它位于服务类中。
HashMap<String, List<Courses>> courseList = new HashMap<String, List<Courses>>();
[修改为适合解决方案]
服务
public void add( Map<String, List<Courses>> course) {
course.forEach((string, list) -> {
if(course_list.containsKey(semester)) {
course_list.get(semester).addAll(course);
} else {
course_list.put(semester, course);
}
});
}
public void edit(String semester, String id, Courses courses) {
// Get the Course list from the Map
List<Courses> updatedCourse = course_list.get(semester);
// Loop and find the matching object within the list
for(int i=0; i<updatedCourse.size(); i++){
if (updatedCourse.get(i).getID().equals(id)){
// Once object found, update its values in the list
updatedCourse.get(i).set(course.getSubject())
. . .
// Finally, replace the list within the map
course_list.replace(semester, updatedCourse);
}
}
}
控制器
@RequestMapping(method=RequestMethod.POST, value="/add")
public void addCourse(@RequestBody Map<String, List<Courses>> course) {
service.addTest(course);
}
@RequestMapping(method=RequestMethod.PUT, value="/edit/{semster}/{id}")
public void addCourse(@PathVariable("semester") String semester, @PathVariable("id") String id, @RequestBody Courses course) {
service.editTest(semester, id, course);
}
当我第一次添加 JSON 并获得正确的 JSON 结构时,一切都按预期工作。但是,添加和编辑值时会变得复杂。
- [SOLVED] 每当我将单个对象添加到数组中时,它都会替换之前在数组中的所有对象。
例如,我在“2020 年春季”数组中有两个对象。如果我使用 addCourse() 发出另一个 POST 请求,两个对象都会被替换 - [已解决] 如果我尝试使用邮递员进行编辑,我会遇到一些异常 罢工>
PUT: localhost:8080/edit/Spring20/
>> "message": "Missing URI template variable 'semester' for method parameter of type String",
我尝试对此进行调查,但没有找到任何有用的链接或示例,其中人们使用 Spring Boot 对 JSON 进行分类和组织。如果有什么可以帮助的,请在下面评论。
编辑 以下解决方案有助于修复这些错误。我希望这篇文章可以帮助任何可能遇到相同问题的人!
这是我在 MongoDB 中使用 Map 的另一篇文章。 CRUD operations on Array objects nested within an Object in MongoDB Spring Boot
【问题讨论】:
-
/edit/{semster}/{id}期望类似于edit/spring20/1这里spring20是学期1是id。而且您没有将 PathVariable 用于semster -
不幸的是,这是 REST API 最常见的困难之一。 JSON Patch 之类的想法试图解决它,但这只是偶尔使用(而且 Spring 没有内置支持)。
-
是的,我没有找到任何处理这个问题的在线资源。我很高兴能够获得帮助并找到解决方案!
标签: java spring-boot rest