0x01 问题描述
- 所用的技术:Vue+Spring Boot
- 后端传给前端数据:
[Student(studentId=1, person=org.fatmansoft.teach.models.Person@4abe6020, major=软件工程, className=一班, grade=一年级), Student(studentId=2, person=org.fatmansoft.teach.models.Person@5207b9e6, major=软件工程, className=二班, grade=二年级)]
- 前端接收数据:
前后端通讯数据明显不同,非常疑惑???(・∀・(・∀・(・∀・*)
0x02 解决
问题原因
export interface StudentItem {studentId: number;personId: number;num: string;name: string;dept: string;major: string;className: string;card: string;gender: string;genderName: string;birthday: string;email: string;phone: string;address: string;grade: string;url: string;introduce: string;
}
- 前端的学生数据定义,和后端传的不一致,后端传的person是封装过的,所以前端获取不到person内的数据
- 要想获取到数据,就要在后端将person里封装的数据给拿到Student下
解决方案
定义一个模板类StudentDto继承Student,将Student中没有的数据(此处是url和name),从person里拿到StudentDto里,然后返回一个StudentDto的list。
public DataResponse getStudentListByMajor(@Valid @RequestBody DataRequest dataRequest){Optional<Student> student = studentRepository.findStudentByStudentId((Integer) dataRequest.get("studentId"));Student s = student.get();String major = s.getMajor();List<Student> list = studentRepository.findStudentListByMajor(major);List<StudentDto> collect = list.stream().map((item) -> {StudentDto dto = new StudentDto();BeanUtils.copyProperties(item, dto);dto.setName(item.getPerson().getName());dto.setUrl(item.getPerson().getUrl());return dto;}).collect(Collectors.toList());return CommonMethod.getReturnData(collect);}