[英]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_string
和variable_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.