Hallo, ich habe eine klassische Spring Boot MVC Anwendung und versuche dort gerade ein JSON Objekt, das aus 3 verschachtelten DTOs besteht, zu flatten und wieder in ein DTO zu konvertieren. (Jackson, JsonFlattener, mapstruct). Aber wie zum Geier, kann ich aus dem Flat JSON wieder ein DTO bauen. Es hat zwar schon funktioniert. Für den User sind die Values auch drin. Aber für die eingebetten Collections, fehlen die Werte (null). Ist eigentlich auch klar, weil die unbekannt und nicht gemappt sind. Aber wie kann man das mit mapstruct mappen (in die Richtig geht das doch, oder?). Alles was ich ich jetzt bei Google gefunden habe, hat mir leider nicht weiter geholfen. jsonschema2pojo habe ich bemüht.
[CODE lang="java" title="UserDto"]@Getter @Setter
public class UserDto {
private Long id;
@NotNull
@NotEmpty
private String firstname;
@NotNull
@NotEmpty
private String lastname;
@NotNull
@NotEmpty
private String username;
@NotNull
@NotEmpty
private String email;
@NotNull
@NotEmpty
private String password;
private String passwordconfirm;
private boolean enabled;
private boolean tokenexpired;
private Collection<RoleDto> roles;
}[/CODE]
[CODE lang="java" title="RoleDto"]@Getter @Setter
public class RoleDto {
private String name;
private Collection<PrivilegeDto> privileges;
}[/CODE]
[CODE lang="java" title="PrivilegeDto"]@Getter @Setter
public class PrivilegeDto {
private Long id;
private String name;
}[/CODE]
Bis zum Flat JSON bin ich gekommen. Das liegt als String vor und sieht so aus...
[CODE lang="java" title="UserDto JSON Flat als String"]{
"id": 1,
"firstname": "Test",
"lastname": "Test",
"username": "Avalon",
"email": "test@test.com",
"password": "$2a$10$.zywwDazLvC9srdDWuhp3eAvlVpolETRpUY4hQ4soq.j0Jsygu.gy",
"passwordconfirm": null,
"enabled": true,
"tokenexpired": false,
"roles[0].name": "ROLE_ADMIN",
"roles[0].privileges[0].id": 1,
"roles[0].privileges[0].name": "READ_PRIVILEGE",
"roles[0].privileges[1].id": 2,
"roles[0].privileges[1].name": "WRITE_PRIVILEGE"
}[/CODE]
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
brachte auch nicht das gewünschte Ergebnis. Ich weiß nicht mehr weiter.[CODE lang="java" title="UserDto"]@Getter @Setter
public class UserDto {
private Long id;
@NotNull
@NotEmpty
private String firstname;
@NotNull
@NotEmpty
private String lastname;
@NotNull
@NotEmpty
private String username;
@NotNull
@NotEmpty
private String email;
@NotNull
@NotEmpty
private String password;
private String passwordconfirm;
private boolean enabled;
private boolean tokenexpired;
private Collection<RoleDto> roles;
}[/CODE]
[CODE lang="java" title="RoleDto"]@Getter @Setter
public class RoleDto {
private String name;
private Collection<PrivilegeDto> privileges;
}[/CODE]
[CODE lang="java" title="PrivilegeDto"]@Getter @Setter
public class PrivilegeDto {
private Long id;
private String name;
}[/CODE]
Bis zum Flat JSON bin ich gekommen. Das liegt als String vor und sieht so aus...
[CODE lang="java" title="UserDto JSON Flat als String"]{
"id": 1,
"firstname": "Test",
"lastname": "Test",
"username": "Avalon",
"email": "test@test.com",
"password": "$2a$10$.zywwDazLvC9srdDWuhp3eAvlVpolETRpUY4hQ4soq.j0Jsygu.gy",
"passwordconfirm": null,
"enabled": true,
"tokenexpired": false,
"roles[0].name": "ROLE_ADMIN",
"roles[0].privileges[0].id": 1,
"roles[0].privileges[0].name": "READ_PRIVILEGE",
"roles[0].privileges[1].id": 2,
"roles[0].privileges[1].name": "WRITE_PRIVILEGE"
}[/CODE]