示例获取请求:http://localhost:3000/contact/1
我得到了什么:
{
"id": 1,
"firstname": "First Name",
"lastname": "Last Name",
"emailaddresses": [
{
"emailaddress": "email@gmail.com"
},
{
"emailaddress": "email@g.c"
}
]
}
我想要的:
{
"id": 1,
"firstname": "First Name",
"lastname": "Last Name",
"emailaddresses": ["email@gmail.com","email@g.c"]
}
下面的代码:
人与人
public class PersonDto {
private Long id;
private String firstname;
private String lastname;
private List<EmailAddressDto> emailaddresses;
//getters setters
}
EmailAddressDto
public class EmailAddressDto {
private String emailaddress;
//getters and setters
}
服务类
public PersonDto getPerson(Long personId) { //this is the method inside the class
Optional<PersonEntity> p = peopleRepository.findById(personId);
var dto = modelMapper.map(p.get(), PersonDto.class);
return dto;
}
我还有一个一对多映射到 EmailAddressesEntity
类的 PersonEntity
类。
我真的是 spring/java 的新手 - 我不知道如何获得我想要的 JSON 结构。
最佳答案
您可以使用 @JsonValue
注释 EmailAddressDto
的 emailaddress
字段,并保留所有内容。
public class EmailAddressDto {
@JsonValue
private String emailaddress;
//getters and setters
}
使用上面的示例输出:
PersonDto personDto = new PersonDto();
personDto.setId(1L);
personDto.setFirstname("John");
personDto.setLastname("Doe");
personDto.setEmailaddresses(Arrays.asList(new EmailAddressDto("john@doe.com"), new EmailAddressDto("foo@bar.com")));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(personDto);
System.out.println(json);
是:
{"id":1,"firstname":"John","lastname":"Doe","emailaddresses":["john@doe.com","foo@bar.com"]}
关于Spring Boot Java 映射实体到 DTO : array literal (strings) INSTEAD of array of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69555910/