我正在尝试使用Jackson序列化类,以便序列化我的类以两种不同的方式发送属性(作为String和枚举)。我如何确定杰克逊实际上在不声明的情况下为JSON输出添加了不同的属性?
我的代码是
private LearningForm cnfpLearningOrganisationLearningForm;
......
/**
* @return the cnfpLearningOrganisationLearningForm
*/
public String getCnfpLearningOrganisationLearningFormSearch() {
return cnfpLearningOrganisationLearningForm.getValue();
}
/**
* @return the cnfpLearningOrganisationLearningForm
*/
public LearningForm getCnfpLearningOrganisationLearningForm() {
return cnfpLearningOrganisationLearningForm;
}
我希望杰克逊将其序列化为: { .... cnfpLearningOrganisationLearningForm:someValue cnfpLearningOrganisationLearningFormSearch:differentValue .... }
有没有办法在没有将cnfpLearningOrganisationLearningFormSearch声明为类中的(无序除序列化)字段的情况下执行此操作?
谢谢。
答案 0 :(得分:0)
有@JsonProperty注释,允许您动态评估属性值(如果您想要返回枚举和字符串,可以声明它返回Object,如果我正确理解了问题)
@JsonProperty("test")
public Object someProp(){
if (condition) return SomeEnum.VALUE;
else
return "StringValue";
}
答案 1 :(得分:0)
有没有办法在没有将cnfpLearningOrganisationLearningFormSearch声明为类中的(无序除序列化)字段的情况下执行此操作?
是。默认情况下,Jackson将使用getter作为属性,而不考虑任何字段。因此,原始问题中描述的bean应该按照需要序列化,就好了。
以下代码演示了这一点(为了获得良好的衡量标准,引入了不必要的枚举)。
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
System.out.println(new ObjectMapper().writeValueAsString(new Bar()));
// output: {"propertyAsValue":"some_value","propertyAsEnum":"VALUE"}
}
}
class Bar
{
public String getPropertyAsValue()
{
return MyEnum.VALUE.getValue();
}
public MyEnum getPropertyAsEnum()
{
return MyEnum.VALUE;
}
}
enum MyEnum
{
VALUE;
public String getValue()
{
return "some_value";
}
}