В моем классе CurriculumVitae список WorkExperience не отображается.JAVA

Программисты JAVA общаются здесь
Anonymous
В моем классе CurriculumVitae список WorkExperience не отображается.

Сообщение Anonymous »

Я делаю небольшое приложение в Spring Boot для учебной программы. Это мой класс CurriculumVitae, где я столкнулся с проблемой получения пустых списков в ответе JSON от API.

Код: Выделить всё

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "curriculum_vitae")
public class CurriculumVitae {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private String lastName;

@OneToMany(mappedBy = "curriculumVitae", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List workExperiences;

@OneToMany(mappedBy = "curriculumVitae", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List levelEducations;

}
На уроке учебной программы я создал список опыта работы. Когда я тестирую свой API в Postman, ответ JSON возвращает список пустых объектов.

Код: Выделить всё

[
{
"id": 1,
"name": "Jean Dupont",
"lastName": "Dupont",
"workExperiences": [],
"levelEducations": []
},
{
"id": 2,
"name": "Jean Dupont",
"lastName": "Dupont",
"workExperiences": [],
"levelEducations": []
},
{
"id": 3,
"name": "Jean Dupont",
"lastName": "Dupont",
"workExperiences": [],
"levelEducations": []
},
{
"id": 4,
"name": "Jean Dupont",
"lastName": "Dupont",
"workExperiences": [],
"levelEducations": []
}
]
Есть ли у кого-нибудь идеи, в чем может быть проблема? Пока решения я не нашел. Выкладываю часть кода из своих занятий.

Код: Выделить всё

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "work_experience")
@JsonIgnoreProperties("curriculumVitae")
public class WorkExperience {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String company;

private String position;

@JsonFormat(pattern = "dd/MM/yyyy")
private Date startDate;

@JsonFormat(pattern = "dd/MM/yyyy")
private Date endDate;

@ManyToOne
@JoinColumn(name = "curriculum_id")
@JsonManagedReference
private CurriculumVitae curriculumVitae;

}
Мои DTO для обоих классов.

Код: Выделить всё

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CurriculumVitaeDTO implements Serializable {

@Serial
private static final long serialVersionUID = -8732529708250756609L;

private Long id;

private String name;

private String lastName;

private List workExperiences;

private List levelEducations;

}

Код: Выделить всё

@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WorkExperienceDTO {

private Long id;

private String company;

private String position;

@JsonFormat(pattern = "dd/MM/yyyy")
private Date startDate;

@JsonFormat(pattern = "dd/MM/yyyy")
private Date endDate;
}

Мои картографы, я использую MapStruct для картографии.

Код: Выделить всё

@Mapper(componentModel = "spring")
public interface CurriculumVitaeMapper {

CurriculumVitaeMapper INSTANCE = Mappers.getMapper(CurriculumVitaeMapper.class);

@Mappings({
@Mapping(source = "id", target = "id"),
@Mapping(source = "workExperiences", target = "workExperiences"),
@Mapping(source = "levelEducations", target = "levelEducations")
})
CurriculumVitaeDTO toDto(CurriculumVitae curriculumVitae);

@Mappings({
@Mapping(source = "id", target = "id"),
@Mapping(source = "workExperiences", target = "workExperiences"),
@Mapping(source = "levelEducations", target = "levelEducations")
})
CurriculumVitae toEntityCurriculumVitae(CurriculumVitaeDTO curriculumVitae);
}

Код: Выделить всё

@Mapper(componentModel = "spring")
public interface WorkExperienceMapper {

WorkExperienceMapper INSTANCE = Mappers.getMapper(WorkExperienceMapper.class);

@Mapping(source = "id", target = "id")
WorkExperienceDTO toWorkExperienceDTO(WorkExperience workExperience);

@Mapping(source = "id", target = "id")
WorkExperience toEntityWorkExperience(WorkExperienceDTO workExperienceDTO);
}
мое обслуживание классов

Код: Выделить всё

@Service
public class CurriculumVitaeServiceImpl implements CurriculumVitaeServiceInter {

private final CurriculumVitaeRepository curriculumVitaeRepository;

private final CurriculumVitaeMapper curriculumVitaeMapper;

public CurriculumVitaeServiceImpl(CurriculumVitaeRepository curriculumVitaeRepository, CurriculumVitaeMapper curriculumVitaeMapper) {
this.curriculumVitaeRepository = curriculumVitaeRepository;
this.curriculumVitaeMapper = curriculumVitaeMapper;
}

@Override
public List  getAllCurriculumVitaes() {
return curriculumVitaeRepository.findAll()
.stream()
.map(curriculumVitaeMapper::toDto)
.toList();
}

@Override
public CurriculumVitaeDTO createCurriculumVitae(CurriculumVitaeDTO curriculumVitaeDTO) {

if (curriculumVitaeDTO.getName() == null || curriculumVitaeDTO.getName().isEmpty()) {
throw new BadRequestException("The name of Curriculum Vitae  is mandatory");
}

var newCurriculumVitae = curriculumVitaeMapper.toEntityCurriculumVitae(curriculumVitaeDTO);
newCurriculumVitae = curriculumVitaeRepository.save(newCurriculumVitae);

return curriculumVitaeMapper.toDto(newCurriculumVitae);
}

@Override
public Optional getCurriculumVitaeById(Long id) {
if (!curriculumVitaeRepository.existsById(id)) {
throw new NotFoundException("Curriculum Vitae with id " + id + " doesn't exist");
}
return curriculumVitaeRepository.findById(id).map(curriculumVitaeMapper::toDto);
}

@Override
public void deleteCurriculumVitae(Long id) {

if (!curriculumVitaeRepository.existsById(id)) {
throw new NotFoundException("Curriculum Vitae with id " + id + " not found");
}
curriculumVitaeRepository.deleteById(id);
}

Код: Выделить всё

@Service
public class WorkExperienceServiceImpl implements WorkExperienceServiceInter {

private final WorkExperienceRepository workExperienceRepository;

private final WorkExperienceMapper workExperienceMapper;

public WorkExperienceServiceImpl(WorkExperienceRepository workExperienceRepository, WorkExperienceMapper workExperienceMapper) {
this.workExperienceRepository = workExperienceRepository;
this.workExperienceMapper = workExperienceMapper;
}

@Override
public List getAllWorkExperience() {
return workExperienceRepository.findAll()
.stream()
.map(workExperienceMapper::toWorkExperienceDTO)
.toList();
}

@Override
public Optional getWorkExperienceById(Long id) {
if (!workExperienceRepository.existsById(id)) {
throw new NotFoundException("Work experience with id " + id + " doesn't exist");
}
return workExperienceRepository.findById(id).map(workExperienceMapper::toWorkExperienceDTO);
}

@Override
public WorkExperienceDTO createWorkExperience(WorkExperienceDTO workExperienceDTO) {
WorkExperience newExperienceDTO = workExperienceMapper.toEntityWorkExperience(workExperienceDTO);
newExperienceDTO = workExperienceRepository.save(newExperienceDTO);

if (workExperienceDTO.getCompany().isEmpty()) {
throw new BadRequestException(" The name of Company is mandatory ");
}

return workExperienceMapper.toWorkExperienceDTO(newExperienceDTO);
}

@Override
public void deleteWorkExperience(Long id) {
if (!workExperienceRepository.existsById(id)) {
throw new NotFoundException("Work experience with id " + id + " not found");
}
workExperienceRepository.deleteById(id);
}
}

Мой контроллер

Код: Выделить всё

@RestController
@RequestMapping("/api/v1")
@CrossOrigin(origins = "http://localhost:4200")
public class CurriculumVitaeController {

private final CurriculumVitaeServiceInter curriculumVitaeServiceInter;

private final Logger logger = LoggerFactory.getLogger(CurriculumVitaeController.class);

public CurriculumVitaeController(CurriculumVitaeServiceInter curriculumVitaeServiceInter) {
this.curriculumVitaeServiceInter = curriculumVitaeServiceInter;
}

@GetMapping(value = "/curriculumVitaes", produces = MimeTypeUtils.APPLICATION_GRAPHQL_VALUE)
public ResponseEntity getAllCurriculumVitaes() {

List curriculumVitaeDTOList = curriculumVitaeServiceInter.getAllCurriculumVitaes();

if (curriculumVitaeDTOList != null &&  curriculumVitaeDTOList.isEmpty()) {
return ResponseEntity.noContent().build();
}
logger.info("Find CurriculumVitae service finished");
return ResponseEntity.ok().body(curriculumVitaeDTOList);

}

@PostMapping(value = "/curriculumVitae", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity createCurriculum(@Valid @RequestBody CurriculumVitaeDTO curriculumVitaeDTO) {
if (curriculumVitaeDTO.getName() == null || curriculumVitaeDTO.getName().trim().isEmpty()) {
throw new BusinessException("Curriculum Vitae is required", HttpStatus.BAD_REQUEST);
}

CurriculumVitaeDTO newCurriculumDTO = curriculumVitaeServiceInter.createCurriculumVitae(curriculumVitaeDTO);

return ResponseEntity.status(HttpStatus.CREATED).body(newCurriculumDTO);
}

@GetMapping(value = "/curriculumVitae/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity getCurriculumVitae(@PathVariable Long id) {
Optional newCurriculumVitae = curriculumVitaeServiceInter.getCurriculumVitaeById(id);
return ResponseEntity.status(HttpStatus.OK).body(newCurriculumVitae);
}

@DeleteMapping(value = "/curriculumVitae/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity deleteCurriculumVitae(@PathVariable Long id) {
curriculumVitaeServiceInter.deleteCurriculumVitae(id);
return ResponseEntity.ok().body("Curriculum Vitae is deleted");

}

@PutMapping(value = "/curriculumVitae/update", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity updateCurriculumVitae(@Valid @RequestBody CurriculumVitaeDTO curriculumVitaeDTO) {
if (curriculumVitaeDTO.getId() == null) {
throw new BusinessException("Curriculum Vitae is required", HttpStatus.BAD_REQUEST);
}

CurriculumVitaeDTO updateCurriculumVitae = curriculumVitaeServiceInter.createCurriculumVitae(curriculumVitaeDTO);
return ResponseEntity.status(HttpStatus.OK).body(updateCurriculumVitae);
}

}

Код: Выделить всё

@RestController
@RequestMapping("/api/v1")
@CrossOrigin(origins = "http://localhost:4200")
public class WorkExperienceController {

private final Logger logger = LoggerFactory.getLogger(WorkExperienceController.class);

private final WorkExperienceServiceInter workExperienceServiceInter;

public WorkExperienceController(WorkExperienceServiceInter workExperienceServiceInter) {
this.workExperienceServiceInter = workExperienceServiceInter;
}

@GetMapping(value = "/workExperiences", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity getAllWorkExperience() {
List workExperienceDTOList = workExperienceServiceInter.getAllWorkExperience();

if (workExperienceDTOList.isEmpty()) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.ok(workExperienceDTOList);
}

@PostMapping(value = "/workExperience", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity createWorkExperience(@RequestBody WorkExperienceDTO workExperienceDTO) {
if (workExperienceDTO.getCompany() == null || workExperienceDTO.getCompany().trim().isEmpty()) {
throw new BadRequestException("Company name cannot be empty");
}

WorkExperienceDTO newWorkExperience = workExperienceServiceInter.createWorkExperience(workExperienceDTO);
return ResponseEntity.status(HttpStatus.CREATED).body(newWorkExperience);
}

@GetMapping(value = "/workExperience/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity getWorkExperienceById(@PathVariable Long id) {
Optional workExperienceDTO = workExperienceServiceInter.getWorkExperienceById(id);
return ResponseEntity.status(HttpStatus.OK).body(workExperienceDTO);
}

@DeleteMapping(value = "/workExperience/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public ResponseEntity  deleteWorkExperience(@PathVariable Long id) {
workExperienceServiceInter.deleteWorkExperience(id);
return ResponseEntity.ok("Work Experience deleted");
}

@PutMapping(value = "/update")
public ResponseEntity updateWorkExperience(@Valid @RequestBody WorkExperienceDTO workExperienceDTO) {
if (workExperienceDTO.getId() == null) {
return ResponseEntity.badRequest().body(null);
}

var updateWorkExperienceDTO = workExperienceServiceInter.createWorkExperience(workExperienceDTO);
return ResponseEntity.ok().body(updateWorkExperienceDTO);
}

}

спасибо за помощь
Я делаю небольшое приложение в Spring Boot для учебной программы. Это мой класс CurriculumVitae, где я столкнулся с проблемой получения пустых списков в ответе JSON от API

Подробнее здесь: https://stackoverflow.com/questions/790 ... not-appear

Вернуться в «JAVA»