デシリアライズJSONクラスのインスタンスへ

Onil:

私は、送信者のサービスに、それはのように定義され、メッセージとしてのRabbitMQを介して送信されているクラスがあります。

public final class User implements Serializable {

    private String nome;
    private String cognome;

    public User(@JsonProperty("nome") String nome,
                @JsonProperty("cognome") String cognome) {
        this.nome = nome;
        this.cognome = cognome;
    }

    public String getNome() {
        return nome;
    }

    public String getCognome() {
        return cognome;
    }

    public User(){}
}

そして、受信サービスで:

@Document
public class Persona {

    @Id
    @JsonProperty
    public ObjectId id;

    private String nome;

    private String cognome;

    public String getId() {
        return id.toHexString();
    }

    public void setId(ObjectId id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public Persona(ObjectId id, String nome, String cognome) {
        this.id = id;
        this.nome = nome;
        this.cognome = cognome;
    }

    public Persona(){}
}

受信機のコントローラでは、私は、そのメッセージを取る必要があり、以下の方法を、持っているオブジェクトにキャストし、データベースに保存し、それは次のようになります。

@RabbitListener(queues = {"default_parser_q"})
    public void receiveMessage(final Message message){
        ObjectMapper mapper = new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                .configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);

        mapper.readValue(message.getBody(), Persona.class);
        System.out.println(message.toString() + "the message has been received");
    }

問題は、私は上の例外を取得していますということですreadValue()具体的には、この方法:

未処理の例外:java.io.IOExceptionの、com.fasterxml.jackson.core.JsonParseException、com.fasterxml.jackson.databind.JsonMappingException

この場合、送信されたメッセージ(JSON)は、次のとおりです。

{
  'nome': "John",
  'cognome': "Doe"
}

何が私がここに間違っているのでしょうか?

編集:要求されたとして、スタックトレースを追加します。

com.fasterxml.jackson.databind.exc.MismatchedInputExceptionは:のインスタンスを作成することはできませんdemo.com.fetcherservice.models.Persona(少なくとも一つのクリエータが存在していないが):(バイト[[元に文字列値からデシリアライズへの文字列引数コンストラクタ/ファクトリメソッド(「{ 『ドウ』 『ノーム』: 『ジョン』、 『cognomeを』}」) ]) "" {\ n \ T \ T \ T \ "ノーム\":\ "ジョン\"、\ N \ T \ T \ T \ "cognome \":\ "ドウ\" \ n \ T \ T }「」。行1、列:1] COMでcom.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)でcom.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)でcom.fasterxml.jackson.databindでcom.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacksで.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1032)(ValueInstantiator.java:371)。demo.com.fetcherservice.models.Persona(少なくとも一つのクリエータが存在していないが):(バイト[[元に文字列値からデシリアライズへの文字列引数コンストラクタ/ファクトリメソッド(「{ 『ドウ』 『ノーム』: 『ジョン』、 『cognomeを』}」) ]) "" {\ n \ T \ T \ T \ "ノーム\":\ "ジョン\"、\ N \ T \ T \ T \ "cognome \":\ "ドウ\" \ n \ T \ T }「」。行1、列:1] COMでcom.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)でcom.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)でcom.fasterxml.jackson.databindでcom.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacksで.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1032)(ValueInstantiator.java:371)。

料理:

それはあなたにも春を使用しているので、私はそれは同じだと仮定し、私はカフカのために見てきた行動のように見えます。

あなたの送信側JSONにオブジェクトを変換し、それを文字列として送信します- (エラーメッセージで、したがってエスケープ引用符\"nome\": \"John\",\n\t\t\t\"cognome\": \"Doe\")。

あなたは、送信者側でJsonSerializerを宣言し、それを渡す必要があり、あなたのUser、または-手動でJSON文字列を作成する場合-春は引用符や空白を脱出しようとしないので、それはバイト配列だ宣言すること。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=231921&siteId=1