Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有条件地重命名Jackson JSON输出_Java_Jackson - Fatal编程技术网

Java 有条件地重命名Jackson JSON输出

Java 有条件地重命名Jackson JSON输出,java,jackson,Java,Jackson,假设有一个类包含一个变量: @Data public class Student { private List<Grade> allGrades; } 现在,我们正在构建一个可以在生产者之间动态切换的应用程序,因此有些可以用Java编写,有些可以用Python编写 在我们的应用程序中,我们可以通过将其存储在配置中或作为请求头发送来了解这一点 如果生产者是Java,我们希望避免重命名属性。因此,主要问题是: (如何)可以根据字符串/布尔值有条件地将属性allGrades重命名

假设有一个类包含一个变量:

@Data
public class Student {
    private List<Grade> allGrades;
}
现在,我们正在构建一个可以在生产者之间动态切换的应用程序,因此有些可以用Java编写,有些可以用Python编写

在我们的应用程序中,我们可以通过将其存储在配置中或作为请求头发送来了解这一点

如果生产者是Java,我们希望避免重命名属性。因此,主要问题是:


(如何)可以根据字符串/布尔值有条件地将属性allGrades重命名为all_grades吗?

我确信Jackson不支持这种开箱即用的方法,我认为也不应该这样做。如果你真的要做这样的事情,你可以为不同的制作人为你的
学生
类划分子类,比如

@数据
班级学生{
所有职系的私人名单;
@JsonProperty
列出getAllGrades(){
返回所有等级;
}
}
@资料
@EqualsAndHashCode(callSuper=true)
类PythonStudent扩展了学生{
@JsonProperty(“所有等级”)
@凌驾
public void getAllGrades(){
super.getAllGrades();
}
}
然后根据工厂类中的条件构造所需的对象


也就是说,使用snake_case或camelCase约定在Java和Python中使用JSON字符串并将其映射到所需格式的字段非常容易。我不认为你想要实现的东西会增加任何价值,但它肯定会带来很多复杂性。

也许所述用例不是最好的例子,但问题仍然存在,并且有多个用例。如果不支持,那么它确实会给我们增加太多的复杂性。然后我们必须坚持使用其中一个,让制作人映射值。谢谢
@Data
public class Student {
    @JsonProperty("all_grades")
    private List<Grade> allGrades;
}