2015-01-02 21 views
34

Potrzebuję przekonwertować json na pojo. Postanowiłem wykorzystać Jackson i dodałem jackson-core-2.2.0.jar, Jackson-databind-2.4.4.jar i Jackson-adnotacji-2.1.2.jar na ścieżce klasy mojego projektuWyjątek w wątku "główny" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering() Z

stworzyłem po Main klasie :

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.List; 
import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.type.TypeReference; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.DeserializationFeature; 

public class Json { 
private static String SRC= ""; 

    public static void main(String[] args) { 

     AwardList awardList = null; 
     ObjectMapper mapper = new ObjectMapper(); 

     try{ 
      awardList = (AwardList) mapper.readValue(new URL(SRC), AwardList.class); 
     }catch (JsonGenerationException e){ 
      e.printStackTrace(); 
     } catch (JsonMappingException e){ 
      e.printStackTrace(); 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
     System.out.println(awardList); 

    } 
} 

i po AwardList Klasa:

public class AwardList { 

    private Flights[] flights; 
    private String[] connections; 

    private SaverEconomy saverEconomy; 
    private StandartEconomy standartEconomy; 
    private SaverBusiness saverBusiness; 
    private StandartFirst standartFirst; 
    private SaverFirst saverFirst; 


    public Flights[] getFlights() { 
     return flights; 
    } 

    public void setFlights(Flights[] flights) { 
     this.flights = flights; 
    } 

    public SaverEconomy getSaverEconomy() { 
     return saverEconomy; 
    } 

    public void setSaverEconomy(SaverEconomy saverEconomy) { 
     this.saverEconomy = saverEconomy; 
    } 

    public StandartEconomy getStandartEconomy() { 
     return standartEconomy; 
    } 

    public void setStandartEconomy(StandartEconomy standartEconomy) { 
     this.standartEconomy = standartEconomy; 
    } 

    public SaverBusiness getSaverBusiness() { 
     return saverBusiness; 
    } 

    public void setSaverBusiness(SaverBusiness saverBusiness) { 
     this.saverBusiness = saverBusiness; 
    } 

    public StandartFirst getStandartFirst() { 
     return standartFirst; 
    } 

    public void setStandartFirst(StandartFirst standartFirst) { 
     this.standartFirst = standartFirst; 
    } 

    public SaverFirst getSaverFirst() { 
     return saverFirst; 
    } 

    public void setSaverFirst(SaverFirst saverFirst) { 
     this.saverFirst = saverFirst; 
    } 

    public String[] getConnections() { 
     return connections; 
    } 

    public void setConnections(String[] connections) { 
     this.connections = connections; 
    } 
} 

chcę przekonwertować json do POJO i zapisać go w bazie danych. Ciągle dostaję następujący błąd:

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z 
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:457) 
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379) 
    at Json.main(Json.java:72) 
+4

Dlaczego używasz różnych wersji słoików Jacksona? Masz jackson-core, jackson-databind, adnotacje jackson, ale wszystkie mają różne wersje? Pierwszym krokiem byłoby zalecenie użycia tych samych wersji wydania. Właśnie dla informacji wersja 2.5 została wydana dzisiaj. –

+2

Masz inną wersję słoików jackson, które ładują się przed tymi słoikami. sprawdź inną wersję i usuń te – NullPointerException

+0

Pracowałem także dla mnie używając tych samych wersji: – Imeksbank

Odpowiedz

58

Otrzymałem dokładnie ten sam problem. Używałem Maven dla zarządzania zależność i dodał zależność modułu Jackson-databind tylko jak ten

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

a następnie postanowiłem go w ten sposób .. I dodaje jej przechodnie zależności wyraźnie z tego samego jackson.version wymienione każdy z nich w pliku pom.xml, jak kierować here

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
+0

To działało dla mnie, ale zauważ, że ten słoik powinien następnie wystąpić w ścieżce klas przed słoikami z wcześniejszą wersją jackson. –

+0

To zadziałało dla mnie .. podziękowania ... dodałem powyżej zarówno do mojej jackson-databind zależność – Nilesh

4

miałem ten sam problem. Wystąpiła pewna niezgodność między wersją jackson 2.6.3 a inną zależnością (osadzoną w grafawarerze).

Mogłem rozwiązać problem, po prostu usuwając zależność od jackson w mojej własnej pom i po prostu pozwól drugiej zależności załadować dowolną wersję jackson, której potrzebowała.

11

Przyszedłem tutaj z podobnym problemem w Google App Engine. Oto jak to naprawiłem.

Pierwszy wpadłem:

mvn dependency:tree 

Aby dowiedzieć się kto korzysta ze starszej wersji. I wtedy wykluczyć, że z uzależnienia naruszającego tak:

<dependency> 
    <groupId>com.google.appengine.tools</groupId> 
    <artifactId>appengine-gcs-client</artifactId> 
    <version>0.6</version> 
    <exclusions> 
     <exclusion> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Następny dodałem nowszą wersję uzależnienia w moim pom.xml:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.8.7</version> 
</dependency> 

Nadzieja to pomóc innym, którzy potykają się tutaj.

Powiązane problemy