2017-06-07 66 views
0

我有一个类似的问题Jackson dynamic property names。 我需要根据var_name的值设置结果属性名称。 我可以在自定义序列化程序中做些什么来传递var_name?使用Jackson的动态字段名称

@NotBlank 
private String var_name;  
@NotNull 
private Object result; 
public DataObject(String var_name, Object result) { 
    this.var_name = var_name; 
    this.result = result; 
} 
@JsonProperty 
@JsonSerialize(using = CustomSerializer.class) 
public String getName() { 
    return var_name;} 
@JsonProperty 
@JsonSerialize(using = CustomSerializer.class) 
public void setName(Object var_name) { 
    this.result = var_name;}  
@JsonProperty 
@JsonSerialize(using = CustomSerializer.class) 
public Object getResult() { 
    return result;} 
@JsonProperty 
@JsonSerialize(using = CustomSerializer.class) 
public void setResult(Object result) { 
    this.result = result;} 

public class CustomSerializer extends JsonSerializer<Object> { 
    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     jgen.writeStartObject(); 
     jgen.writeObjectField(***how can i insert var_name here***, value); 
     jgen.writeEndObject(); 
    } 
} 

邮来电:

@POST 
public List<DataObject> search(){ 
    List<DataObject> list = new ArrayList<DataObject>(); 
    //some iteration function 
     //... 
     list.add(new DataObject(variable_string, variable_object)); 
     //...  
    return list; 
} 

variable_stringvariable_object通过查询知识库的结果确定。
期望JSON响应例如:

[{ 
    "Name": "John", 
    "Age": 69 
}, 
{ 
    "Name": "Jane", 
    "Gender": "Female", 
    "DateTime": "2017-6-12T15:09:25" 
}] 

感谢。

+0

我真的很喜欢这个问题,不能忘记的。即使它是错误的或基本的,至少留下评论说你为什么倒票,所以我可以改进它。 – wmw301

+0

我想你应该提供一个输入和预期结果的例子。 –

+0

谢谢。我已经包括了这一点。 – wmw301

回答

2

为了在你的问题中提到的情况,你可以使用一个Map<K, V>

@POST 
public List<Map<String, String>> search() { 

    List<Map<String, String>> list = new ArrayList<>(); 
    Map<String, String> item; 

    item = new HashMap<>(); 
    item.put("Name", "John"); 
    item.put("Age", "69"); 
    list.add(item); 

    item = new HashMap<>(); 
    item.put("Jane", "John"); 
    item.put("Age", "96"); 
    list.add(item); 

    return list; 
} 
+0

好的。我已经解释过了。它应该是'list.add(new DataObject(variable_string,variable_object));'其中'variable_string'和'variable_object'是通过对知识库的查询结果定义的。 – wmw301

+0

@ wmw301然后你可以使用'Map'。 –

+0

@ wmw301看到我更新的答案。 –

相关问题