Spring Boot 错误?Jackson对象Map程序在对象列表末尾添加对象

pxiryf3j  于 2023-03-02  发布在  Spring
关注(0)|答案(1)|浏览(115)

我的应用程序有一个对象GameCards,它包含一副纸牌(根据两副普通纸牌混洗),我通过一个调用JacksonobjectMapper的转换器将它存储为字符串。
在我存储它之前,对象看起来像这样:

[gameDeck=[Card [kleur=harten, waarde=_8], Card [kleur=schoppen, waarde=vrouw], Card [kleur=harten, waarde=heer], Card [kleur=harten, waarde=_5], Card [kleur=schoppen, waarde=_9], Card [kleur=harten, waarde=boer], Card [kleur=harten, waarde=_3], Card [kleur=klaver, waarde=_4], Card [kleur=ruiten, waarde=aas], Card [kleur=ruiten, waarde=_4], Card [kleur=schoppen, waarde=_3], Card [kleur=ruiten, waarde=heer], Card [kleur=ruiten, waarde=_5], Card [kleur=harten, waarde=_4], Card [kleur=schoppen, waarde=_9], Card [kleur=klaver, waarde=_5], Card [kleur=ruiten, waarde=_5], Card [kleur=klaver, waarde=_9], Card [kleur=schoppen, waarde=_8], Card [kleur=harten, waarde=aas], Card [kleur=ruiten, waarde=aas], Card [kleur=harten, waarde=vrouw], Card [kleur=ruiten, waarde=_2], Card [kleur=ruiten, waarde=vrouw], Card [kleur=schoppen, waarde=_7], Card [kleur=schoppen, waarde=_7], Card [kleur=harten, waarde=_6], Card [kleur=schoppen, waarde=_4], Card [kleur=schoppen, waarde=vrouw], Card [kleur=schoppen, waarde=boer], Card [kleur=harten, waarde=vrouw], Card [kleur=klaver, waarde=boer], Card [kleur=klaver, waarde=_6], Card [kleur=ruiten, waarde=_6], Card [kleur=harten, waarde=_9], Card [kleur=schoppen, waarde=heer], Card [kleur=ruiten, waarde=_7], Card [kleur=schoppen, waarde=_2], Card [kleur=ruiten, waarde=boer], Card [kleur=schoppen, waarde=_5], Card [kleur=schoppen, waarde=heer], Card [kleur=schoppen, waarde=aas], Card [kleur=harten, waarde=_3], Card [kleur=ruiten, waarde=_2], Card [kleur=ruiten, waarde=_8], Card [kleur=schoppen, waarde=_6], Card [kleur=ruiten, waarde=_4], Card [kleur=harten, waarde=boer], Card [kleur=harten, waarde=_8], Card [kleur=klaver, waarde=_8], Card [kleur=klaver, waarde=_3], Card [kleur=klaver, waarde=_7], Card [kleur=ruiten, waarde=_7], Card [kleur=ruiten, waarde=vrouw], Card [kleur=schoppen, waarde=boer], Card [kleur=harten, waarde=_5], Card [kleur=schoppen, waarde=_6], Card [kleur=klaver, waarde=_2], Card [kleur=harten, waarde=_4], Card [kleur=schoppen, waarde=_2], Card [kleur=klaver, waarde=vrouw], Card [kleur=klaver, waarde=_2], Card [kleur=harten, waarde=_2], Card [kleur=klaver, waarde=heer], Card [kleur=klaver, waarde=_7], Card [kleur=harten, waarde=_9], Card [kleur=ruiten, waarde=_6], Card [kleur=klaver, waarde=aas], Card [kleur=klaver, waarde=_4], Card [kleur=ruiten, waarde=heer], Card [kleur=schoppen, waarde=_3], Card [kleur=klaver, waarde=aas], Card [kleur=ruiten, waarde=_3], Card [kleur=klaver, waarde=_6], Card [kleur=klaver, waarde=_5], Card [kleur=schoppen, waarde=_8], Card [kleur=harten, waarde=aas], Card [kleur=harten, waarde=heer], Card [kleur=klaver, waarde=_8], Card [kleur=ruiten, waarde=_8], Card [kleur=schoppen, waarde=_5], Card [kleur=ruiten, waarde=_3], Card [kleur=klaver, waarde=_9], Card [kleur=ruiten, waarde=boer], Card [kleur=schoppen, waarde=_4]]]

它被转换成这个json(注意,一个Object Card被添加在开始处(实际上,gameCards对象中的第二张卡被作为一张单独的卡放置在gameCards对象之前......它不应该在那里......):

{"card":{"kleur":"schoppen","waarde":"vrouw"},"gameCards":[{"kleur":"harten","waarde":"_8"},{"kleur":"harten","waarde":"heer"},{"kleur":"harten","waarde":"_5"},{"kleur":"schoppen","waarde":"_9"},{"kleur":"harten","waarde":"boer"},{"kleur":"harten","waarde":"_3"},{"kleur":"klaver","waarde":"_4"},{"kleur":"ruiten","waarde":"aas"},{"kleur":"ruiten","waarde":"_4"},{"kleur":"schoppen","waarde":"_3"},{"kleur":"ruiten","waarde":"heer"},{"kleur":"ruiten","waarde":"_5"},{"kleur":"harten","waarde":"_4"},{"kleur":"schoppen","waarde":"_9"},{"kleur":"klaver","waarde":"_5"},{"kleur":"ruiten","waarde":"_5"},{"kleur":"klaver","waarde":"_9"},{"kleur":"schoppen","waarde":"_8"},{"kleur":"harten","waarde":"aas"},{"kleur":"ruiten","waarde":"aas"},{"kleur":"harten","waarde":"vrouw"},{"kleur":"ruiten","waarde":"_2"},{"kleur":"ruiten","waarde":"vrouw"},{"kleur":"schoppen","waarde":"_7"},{"kleur":"schoppen","waarde":"_7"},{"kleur":"harten","waarde":"_6"},{"kleur":"schoppen","waarde":"_4"},{"kleur":"schoppen","waarde":"vrouw"},{"kleur":"schoppen","waarde":"boer"},{"kleur":"harten","waarde":"vrouw"},{"kleur":"klaver","waarde":"boer"},{"kleur":"klaver","waarde":"_6"},{"kleur":"ruiten","waarde":"_6"},{"kleur":"harten","waarde":"_9"},{"kleur":"schoppen","waarde":"heer"},{"kleur":"ruiten","waarde":"_7"},{"kleur":"schoppen","waarde":"_2"},{"kleur":"ruiten","waarde":"boer"},{"kleur":"schoppen","waarde":"_5"},{"kleur":"schoppen","waarde":"heer"},{"kleur":"schoppen","waarde":"aas"},{"kleur":"harten","waarde":"_3"},{"kleur":"ruiten","waarde":"_2"},{"kleur":"ruiten","waarde":"_8"},{"kleur":"schoppen","waarde":"_6"},{"kleur":"ruiten","waarde":"_4"},{"kleur":"harten","waarde":"boer"},{"kleur":"harten","waarde":"_8"},{"kleur":"klaver","waarde":"_8"},{"kleur":"klaver","waarde":"_3"},{"kleur":"klaver","waarde":"_7"},{"kleur":"ruiten","waarde":"_7"},{"kleur":"ruiten","waarde":"vrouw"},{"kleur":"schoppen","waarde":"boer"},{"kleur":"harten","waarde":"_5"},{"kleur":"schoppen","waarde":"_6"},{"kleur":"klaver","waarde":"_2"},{"kleur":"harten","waarde":"_4"},{"kleur":"schoppen","waarde":"_2"},{"kleur":"klaver","waarde":"vrouw"},{"kleur":"klaver","waarde":"_2"},{"kleur":"harten","waarde":"_2"},{"kleur":"klaver","waarde":"heer"},{"kleur":"klaver","waarde":"_7"},{"kleur":"harten","waarde":"_9"},{"kleur":"ruiten","waarde":"_6"},{"kleur":"klaver","waarde":"aas"},{"kleur":"klaver","waarde":"_4"},{"kleur":"ruiten","waarde":"heer"},{"kleur":"schoppen","waarde":"_3"},{"kleur":"klaver","waarde":"aas"},{"kleur":"ruiten","waarde":"_3"},{"kleur":"klaver","waarde":"_6"},{"kleur":"klaver","waarde":"_5"},{"kleur":"schoppen","waarde":"_8"},{"kleur":"harten","waarde":"aas"},{"kleur":"harten","waarde":"heer"},{"kleur":"klaver","waarde":"_8"},{"kleur":"ruiten","waarde":"_8"},{"kleur":"schoppen","waarde":"_5"},{"kleur":"ruiten","waarde":"_3"},{"kleur":"klaver","waarde":"_9"},{"kleur":"ruiten","waarde":"boer"},{"kleur":"schoppen","waarde":"_4"}]}

我使用这个转换器。(println输出是我上面显示的。)

import java.io.IOException;
import java.util.List;

import nl.hu.bep2.casino.blackjack.domain.GameCards;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

@Converter
public class CardListConverter implements AttributeConverter<GameCards, String> {
    
    GameCards gameCards = new GameCards();
    @Override
    public String convertToDatabaseColumn(GameCards gameCards) {
        System.out.println("%%%%$$$$$%%%%%###############$$$$$$$$$$$$$$$");
        System.out.println("CardListConverter to db is aangeroepen!!! voor gameCards " + gameCards);
        final ObjectMapper mapper = new ObjectMapper();
       
        String gameCardsJson = null;
        try {
            gameCardsJson = mapper.writeValueAsString(gameCards);
            
            System.out.println("dit maakt de mapper er van:" + gameCardsJson);
        } catch (final JsonProcessingException e) {
            System.out.println("CardListConverter To DB Kolom geeft error"+ e);
        }
        return gameCardsJson;
    }
      
    @Override
    public GameCards convertToEntityAttribute(String gameCardsJson) {
    
        // System.out.println("CardListConverter to Entity is aangeroepen!!! voor gameCardsJson " + gameCardsJson);
        if (gameCardsJson == null) {
            System.out.println("gameCardsJson is empty!!!");
        }
        final ObjectMapper mapper = new ObjectMapper();
       
        try {
            
            return  mapper.readValue(gameCardsJson, GameCards.class );
                
        } catch (final IOException e) {
            System.out.println("CardListConverter To Entity (from json) geeft error"+ e);
           
        }
    
        return null;
    }
}

有人知道这里出了什么问题吗?
游戏卡对象:

public class GameCards implements Serializable {

    private List<Card> gameDeck = new ArrayList<>();  
    
    public GameCards() {
    }
    
    public GameCards(int numberOfDecks) {  
        
        this.gameDeck = GameCards.initiateDeck(numberOfDecks);
    }
    
    
    public static List<Card> initiateDeck(int numberOfDecks) {
        
        
        int loop =numberOfDecks;
        Kleur kleuren[] = Kleur.values();
        Waarde waarden[] = Waarde.values();
        List<Card> cards = new ArrayList<>();
        
        while (loop > 0) {
            
            for(Kleur kleur: kleuren) {
                if (kleur == Kleur.achterkant) {
                    continue;
                }
                for( Waarde waarde: waarden) {
                    if (waarde == Waarde.achterkant) {
                        continue;
                    }
                    Card card = new Card(kleur, waarde);
                    cards.add(card);
                }
            }
            loop--;   // loop met één verlagen als er één compleet deck is toegevoegd
        }
        Collections.shuffle(cards);
        return cards;
        
        
    }

    public  List<Card> getGameCards(){
        return this.gameDeck;
    }

    public Card getCard() {
        
        Card card = null; ;
        
        card = this.gameDeck.get(1); // kies de bovenste kaart van het geschudde deck
        this.gameDeck.remove(1);     //en verwijder deze uit de deck
        return card;                 //geef deze kaart aan bv een speler of dealer

    }

    @Override
    public String toString() {
        return "GameCards [gameDeck=" + gameDeck + "]";
    }

该卡:

public class Card implements Serializable  {
   private Kleur kleur;
   private Waarde waarde;
   
   public Card() {
   }
   
   
   public Card(Kleur kleur, Waarde waarde) {
       this.kleur = kleur;
       this.waarde = waarde;
       // TODO Auto-generated constructor stub
   }

   public Kleur getKleur() {
       return kleur;
   }

   public void setKleur(Kleur kleur) {
       this.kleur = kleur;
   }

   public Waarde getWaarde() {
       return waarde;
   }

   public void setWaarde(Waarde waarde) {
       this.waarde = waarde;
   }

   @Override
   public String toString() {
       return "Card [kleur=" + kleur + ", waarde=" + waarde + "]";
   }
   
   

}
2hh7jdfx

2hh7jdfx1#

ObjectMapper扫描你的set和get方法。所以你不应该使用像getCards和getGameCards这样的方法。因为这些方法你的json生成不正确。你必须像这样修改你的GameCards类。

public class GameCards implements Serializable {

private List<Card> gameDeck = new ArrayList<>();  

public GameCards() {
}

public GameCards(int numberOfDecks) {  
    
    this.gameDeck = GameCards.initiateDeck(numberOfDecks);
}

public static List<Card> initiateDeck(int numberOfDecks) {
    
    
    int loop =numberOfDecks;
    Kleur kleuren[] = Kleur.values();
    Waarde waarden[] = Waarde.values();
    List<Card> cards = new ArrayList<>();
    
    while (loop > 0) {
        
        for(Kleur kleur: kleuren) {
            if (kleur == Kleur.achterkant) {
                continue;
            }
            for( Waarde waarde: waarden) {
                if (waarde == Waarde.achterkant) {
                    continue;
                }
                Card card = new Card(kleur, waarde);
                cards.add(card);
            }
        }
        loop--;   // loop met één verlagen als er één compleet deck is toegevoegd
    }
    Collections.shuffle(cards);
    return cards;
    
    
}

public  List<Card> getGameDeck(){
    return this.gameDeck;
}

public  void setGameDeck(){
    return this.gameDeck;
}

public Card pullCard() {
    
    Card card = null; ;
    
    card = this.gameDeck.get(1); // kies de bovenste kaart van het geschudde deck
    this.gameDeck.remove(1);     //en verwijder deze uit de deck
    return card;                 //geef deze kaart aan bv een speler of dealer

}

@Override
public String toString() {
    return "GameCards [gameDeck=" + gameDeck + "]";
}

}

相关问题