2017-06-07 4 views
0

Ich habe eine ähnliche Frage zu Jackson dynamic property names. Ich muss den Ergebniseigenschaftsnamen gemäß dem Wert von var_name festlegen. Was kann ich im benutzerdefinierten Serializer tun, wenn überhaupt, um var_name zu übergeben?Dynamische Feldname mit 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(); 
    } 
} 

Beitrag Anruf:

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

Wo variable_string und variable_object werden durch das Ergebnis einer Abfrage zu einer Wissensbasis definieren.
Wunsch json Antwort Beispiel:

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

Dank.

+0

Ich würde wirklich vergessen, wie diese Frage nicht werden. Auch wenn es falsch formuliert oder zu grundlegend ist, hinterlasse zumindest einen Kommentar, warum du abstimmst, damit ich es verbessern kann. – wmw301

+0

Ich denke, Sie sollten ein Beispiel für die Eingabe und das erwartete Ergebnis angeben. –

+0

Danke. Ich habe das jetzt aufgenommen. – wmw301

Antwort

2

Für die Situation, die Sie in Ihrer Frage erwähnt, Sie einen Map<K, V> verwenden:

@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

Ok. Ich habe es erklärt. Es sollte 'list.add (neues DataObject (variable_string, variable_object));' sein, wobei 'variable_string' und' variable_object' durch das Ergebnis einer Anfrage an eine Wissensbasis definiert werden. – wmw301

+0

@ wmw301 Sie könnten dann eine 'Map' verwenden. –

+0

@ wmw301 Siehe meine aktualisierte Antwort. –