2016-04-25 10 views
0

Ich benutze Jackson JAXRS JSON-Provider in meiner JEE-Anwendung.Serialize eine LazyDynaList von DynaBean mit Jackson JAXRS-Provider

compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: '2.7.3' 

Ich brauche eine List<?> zu schicken, wo jeder ? eine DynaBean Instanz ist.

Ie:

public class SearchEndpoint implements ISearchEndpoint 
{ 

    @Inject protected SearchService searchService; 

    @Override 
    public Response search(String lqlSentence) 
    { 
     return Response.ok().entity(
      this.searchService.findXXX() 
     ).build(); 
    } 
} 

Nachdem gebaut, um die Antwort, jackson serialisiert diesen Kontext als:

[ 
    { 
     "dynaClass":{ 
      "dynaBeanClass":"org.apache.commons.beanutils.LazyDynaBean", 
      "name":"org.apache.commons.beanutils.LazyDynaClass", 
      "restricted":false, 
      "returnNull":false, 
      "dynaProperties":[ 
       { 
        "name":"wheels", 
        "type":"java.lang.Long", 
        "mapped":false, 
        "indexed":false 
       }, 
       { 
        "name":"doors", 
        "type":"java.lang.Long", 
        "mapped":false, 
        "indexed":false 
       } 
      ] 
     }, 
     "map":{ 
      "wheels": 4, 
      "doors": 2 
     } 
    } 
] 

Ich möchte

public List<?> findXXX() { 
    DynaClass dynaClass = new BasicDynaClass("Car", null, new DynaProperty[]{ 
     new DynaProperty("wheels", Long.TYPE), 
     new DynaProperty("doors", Long.TYPE)} 
    } 
    ); 

    try { 
     DynaBean car = dynaClass.newInstance(); 
     car.set("wheels", 4); 
     car.set("doors", 2); 
    } 
    // ... 

    List<DynaBean> cars = new LazyDynaList(dynaClass); 
    cars.add(car); 

    return cars; 
} 

Als ich das List<?> senden Nur senden:

[ 
    { 
     "wheels": 4, 
     "doors": 2 
    } 
] 

Irgendwelche Ideen?

Antwort

1

Warum versuchen Sie nicht, Ihren eigenen benutzerdefinierten JSON-Serializer für Ihre DynaClass zu erstellen?

Ihr benutzerdefinierter Serializer sieht so aus.

Und dann werden Sie in Ihrer DynaClass Jackson sagen, dass Sie Ihren eigenen benutzerdefinierten Serializer verwenden.

@JsonSerialize(using=DynaSerializer.class) 
public class DynaClass{ 
//Your class definition 
} 

Und dann Ihre JSON-String zu erhalten ...

String jsonStr = new ObjectMapper().writeValueAsString(new DynaClass()); 

Und für mehr Lösungen versuchen Sie es zu diesem Link es ist super hilfreich. http://www.baeldung.com/jackson-custom-serialization

Verwandte Themen