簡體   English   中英

使用傑克遜的動態字段名稱

[英]Dynamic field name using Jackson

我對傑克遜動態屬性名稱有類似的疑問。 我需要根據var_name的值設置結果屬性名稱。 如何在自定義序列化程序中傳遞var_name(如果有的話)?

@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"
}]

謝謝。

對於您在問題中提到的情況,可以使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM