[英]Using Java records for (de-)serializing complex/nested objects to JSON
鉴于以下 JSON...
{
"loginData": {
"username": "foobar",
"password": "secret"
},
"personalData": {
"givenName": "Foo",
"familyName": "Bar"
}
}
这就是我的 POJO(可能带有一些冗长的 Lombok 注释)的样子。 它被 Jackson (反)序列化:
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private LoginData loginData;
private PersonalData personalData;
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class LoginData {
private String username;
private String password;
}
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class PersonalData {
private String givenName;
private String familyName;
}
}
我想知道是否可以使用 Java record
这一相对较新的概念来复制这种结构。 我知道一个简单的记录,例如:
public record LoginData(String username, String password) {}
但是记录也可以用于嵌套/复杂对象,这些对象应使用 Jackson 转换为 JSON?
据我了解,您可以使用类似于普通对象/类的记录。 这也意味着您可以将记录用作其他记录的参数。 我创建了一个简单的示例,用于将您的输入 JSON 字符串转换为带有记录的嵌套 object:
定义三个记录的接口:
public interface IRecord {
record LoginData(String username, String password) {};
record PersonalData(String givenName, String familyName) {};
record Data(LoginData loginData, PersonalData personalData) {};
}
主要class来测试:
public class Main {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{\"loginData\": {\"username\": \"foobar\",\"password\": \"secret\"}, \"personalData\": {\"givenName\": \"Foo\", \"familyName\": \"Bar\"}}";
IRecord.Data user = mapper.readValue(jsonInString, IRecord.Data.class);
System.out.println(user.loginData().username());
}
}
Output:
foobar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.