杰克逊制图问题

时间:2019-08-01 19:12:43

标签: spring spring-boot

我请求以下结构的有效负载:

public class University{
   .......
   List<Dept> departments;
}
public class Dept{
   .......
   List<Student> students;
}
public class Student{
   .......
   List<Semester> semester;
}
public class Semester{
   .......
}

现在我对应的Java类具有以下类型:

List<Semester> semester

现在,除@RequestBody

以外的所有数据都已映射。

我正在使用Spring RestController,并使用@Component({ selector: 'someSelector', ..... }) export class SomeComponent implements OnInit, OnDestroy { public isCon: boolean; public dropdown: string[]; private isComponentActive: boolean = true; constructor(@Inject(MAT_DIALOG_DATA) public data: any, private store$: Store<State>) { this.isCon = data.isCon; } ngOnInit(): void { this.store$.pipe( select(this.returnColumns()), takeWhile((): boolean => this.isComponentActive) ).subscribe((dropdown: []): void => this.setDropdown(dropdown)); } private setDropdown(dropdown: []): void { this.dropdown= filter(dropdown, (key): boolean => !key.isTrue) .map((m): string => m.name); } private returnColumns() { return this.isCon ? getConCol : getEmpCol; } ngOnDestroy(): void { this.isComponentActive = false; } } 进行映射。

有人可以提供任何解决方案吗?

2 个答案:

答案 0 :(得分:2)

对于请求JSON映射,Spring使用getter和setter设置RequestBody Object的属性。

  1. 学生有列表的获取器或设置器吗? 如果具有setterName应该与JSON密钥学期相同 要么 使用
  

@JsonProperty("semester")     列出学期;

  1. 尽管与问题无关,但以下内容也应得到照顾。

    “学期”:[{                         “ SemesterNo”:1                         “ SemesterType”:“奇数”,                         “ CGPA”:8                     },              ]

a。更正它,因为JSON无效,“ CGPA”后不应加逗号:8。

b。 semester应该是semesterNo,因为Spring将使用setterName来设置值,默认情况下是驼峰式大小写,首字母小 或者,如果要使用SemesterNo,请与@JsonProperty("SemesterNo")一起使用。

答案 1 :(得分:0)

使用@JsonProperty("semester")。当您要使用与JSON字段不同的变量名称时,此注释也有帮助。有关更多参考信息,请查看this resource

此外,请在CGPA值之后更正不必要的逗号。用于构建POJO类,jsonschema2pojo.org