2016-06-07 4 views
2

Ich konvertiere Java-Bean in JSON-String mit der Methode writeValueAsString von ObjectMapper, wobei Großbuchstaben von Java-Bean in Kleinbuchstaben in JSON-String geändert wird. Jackson 2.7.4 Version implementiert. Basisbohnenprobe -Jackson - Java-Bean zu JSON-String: Großbuchstaben-Variable in Kleinbuchstaben umgewandelt in JSON

public class BaseBean { 

private static final long serialVersionUID = 3947489072259877540L; 

private int _iXId; 
private String _sPNR; 
private ArrayList _alMinPriced = new ArrayList<TermBean>(); 

public int getXId() { 
    return _iXId; 
} 

public void setXId(int id) { 
    _iXId = id; 
} 

public String getPNRNumber() { 
    return _sPNR; 
} 

public void setPNRNumber(String _spnr) { 
    _sPNR = _spnr; 
} 

public ArrayList getMinPriced() { 
    return _alMinPriced; 
} 

public void setMinPriced(ArrayList minPriced) { 
    _alMinPriced = minPriced; 
} 

public void setMinPriced(TermBean bnTerm) { 
    _alMinPriced.add(bnTerm); 
} 

}

Früher waren wir mit net.sf.json.JSON & JSONSerializer für Java Bean zu JSON Konvertierung. Und die generierte JSON-Zeichenfolge hatte ähnliche Namen wie die Java-Bean. Aufgrund von Leistungsproblemen möchte ich dieses & implementieren Jackson ändern.

Einschränkungen: Wir können die Namenskonvention für Java-Beans nicht ändern, da diese Beans aus älteren Projekten stammen und es wenig Möglichkeiten gibt, die Variablennamen in Bean zu ändern und sogar json-Eigenschaften in jeder Bean hinzuzufügen.

Ich habe unten Code versucht, aber das ist nicht

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); 
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE); 

auch gearbeitet habe, habe ich versucht, PropertyNamingStrategy angepasst, aber nicht eindeutig.

Edited:

net.sf.json.JSON erzeugt JSON Zeichenfolge, wie unten für die oben erwähnten bean:

{"XId":11,"PNRNumber":"123456789","minPriced":[{"name":"JSON"},{"name":"simple"}]} 

Jackson generierte Zeichenfolge JSON wie unten für die oben erwähnten bean :

{"xid":11,"pnrnumber":"123456789","minPriced":[{"name":"JSON"},{"name":"Jackson"}]} 

Wie Sie sehen können, wurde "XId" in "xid" in jackson und "PNRNumber" in "pnrnumber" in jackson konvertiert.

Gibt es Konfigurationsänderungen in Jackson, um solche Modifikationen zu vermeiden. ODER So ein Szenario zu behandeln.

+1

Ich sehe nicht, ob oder wie Sie versuchen, ein JSON von dieser Bean zu generieren - haben Sie das versucht? Was ist der produzierte JSON? - Im Allgemeinen können Sie die Annotation com.fasterxml.jackson.annotation.JsonProperty verwenden, um den Namen der JSON-Eigenschaften zu ändern/sie von den Java-Bean-Feldern abweichen zu lassen. - Ich verstehe deine Frage wahrscheinlich nicht. – cslotty

Antwort

3

Nach Gläser verwendet wurden:

  1. jackson-Core-2.7.4.jar
  2. jackson-Annotationen-2.7.4.jar
  3. jackson-databind-2.7.4.jar

Schritt 1: Bitte schreiben Mixin folgende wie folgt:

import java.util.ArrayList; 
import com.fasterxml.jackson.annotation.JsonProperty; 

public abstract class MixIn { 
    @JsonProperty("PNRNumber") 
    abstract String getPNRNumber(); 

    @JsonProperty("XId") 
    abstract int getXId(); 

    @JsonProperty("minPriced") 
    abstract ArrayList getMinPriced(); 
} 

Schritt 2: Schreiben Sie bitte Ihre Module wie folgt: -

import com.fasterxml.jackson.databind.module.SimpleModule; 

public class MyModule extends SimpleModule{ 
    public MyModule() { 
    super("ModuleName"); 
    } 
    @Override 
    public void setupModule(SetupContext context){ 
    context.setMixInAnnotations(BaseBean.class, MixIn.class); 
    } 
} 

Schritt 3: Jetzt wird es Zeit um json String wie folgt zu erhalten:

TermBean bean1=new TermBean("JSON"); 
TermBean bean2=new TermBean("simple"); 
ArrayList list=new ArrayList(); 
     list.add(bean1); 
     list.add(bean2); 
BaseBean bb=new BaseBean(); 
     bb.setXId(11); 
     bb.setPNRNumber("123456789"); 
     bb.setMinPriced(list); 

ObjectMapper mapper = new ObjectMapper(); 
Module myModule = new MyModule(); 
mapper.registerModule(myModule);   
String jsonInString = mapper.writeValueAsString(bb);  
System.out.printf("JSON: %s", jsonInString); 

Output:

JSON: { "XId": 11, "PNRNumber": "123456789", "minPriced": [{ "name": "JSON"}, { "name": "simple "}]}

Hoffe das hilft.

Verwandte Themen