java - java中的.net json属性转换-@JsonProperty
问题描述
在这里需要一些帮助!我有一个 Java Rest API,它从 .net 端点获取数据并将其传递给 UI。JSON 属性是大写的,我想在将它们发送到 UI 之前将它们转换为 JAVA。对此有任何指示吗?
在java中,我有一个如下的类:
public class Person {
@JsonProperty("Name")
private String name;
@JsonProperty("Age")
private int age;
}
我使用@JsonProperty 作为.net 中的键以大写字母开头。如何在将其发送到 Java 的 UI 之前将其转换回来?
谢谢您的帮助!
解决方案
创建另一个具有相同结构的类,并在那里使用您想要的其他名称。像这样的东西:
// Class to read .NET object
public class Person {
@JsonProperty("Name")
private String name;
@JsonProperty("Age")
private int age;
}
// Class to represent the object in Java REST API
public class Person {
@JsonProperty("name")
private String name;
@JsonProperty("age")
private int age;
}
// Class to represent the object in Java REST API,
// in case you use some standard library that
// uses property names for JSON as is
public class Person {
private String name;
private int age;
}
当然,您应该将这些类放入不同的包中。
您的代码如下所示:
xxx.dotnet.Person dotnetPerson = doSomethingViaDotNet(...);
yyy.rest.Person restPerson = new yyy.rest.Person();
restPerson.setName(dotnetPerson.getName());
restPerson.setAge(dotnetPerson.getAge());
...
return restPerson;
如果您决定使用MapStruct,您的代码可能如下所示:
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper( PersonMapper.class );
yyy.rest.Person dotnetToRest(xxx.dotnet.Person dotnetPerson);
}
由于所有属性都具有相同的名称和类型,因此您在映射器中不需要任何其他内容。
MapStruct 将生成一个实现该接口的类。用法如下:
restPerson = PersonMapper.INSTANCE.dotnetToRest(dotnetPerson);
推荐阅读
- android - 共享元素过渡 Android Q
- performance - Azure 存储帐户 - blob:通过存储资源管理器下载 = 快,通过浏览器下载 https+sas = 慢
- excel - 自动工作表计算(复选框链接到单元格)
- python - 使用 Django SimpleListFilter 自定义动态 list_filter
- r - 可以停用 RStudio 控制台中的 Y/N 提示吗?
- ios - 从 healthKit 中提取心率
- qt - 在不使用滚动按钮的情况下放大/缩小 QT
- angular - 是否可以在触发它的事件之外更改值 @Input/@Output 变量?
- python - 这个交换类型表达式是如何工作的?
- javascript - ng build --prod 的 java 脚本加载问题