web-dev-qa-db-ja.com

start_objectトークンの `java.lang.string`のインスタンスを逆シリアル化できません

私は以下のエラーメッセージを入手しています、誰かがこれをデバッグするのが最善であるかどうかを助けてください。

[source:(pushbackInputStream)でJava.lang.Stringのuneシリアルをstart_oce_code__のインスタンスを逆にすることはできません。 1行目:1、列:37610](リファレンスチェーンを介して:com.model.productlist ["製品"] - > java.util.ArrayList [23] - > Com.Model.Product ["Price"] - > com.price ["今"])

私はREST API呼び出しから製品オブジェクトをデザイレイしようとしています。コードは、価格サブクラスを逆シリアイアルするためにコードを追加するまで正常に機能しています。これは次のように見えます

"price": {
        "was": "",
        "then1": "",
        "then2": "",
        "now": "59.00",
        "uom": "",
        "currency": "GBP"
      },

私の価格POJOは次のように見えます、

public class Price {

     @JsonProperty("was")
     String was;
     @JsonProperty("then1")
     String then1;
     @JsonProperty("then2")
     String then2;
     @JsonProperty("now")
     String now;
     @JsonProperty("uom")
     String uom;
     @JsonProperty("currency")
     String currency;

     public Price() {
         //blank constructor for JSON
     }

     @Override
     public String toString() {
         return "Price{" +
                 "was='" + was + '\'' +
                 ", then1='" + then1 + '\'' +
                 ", then2='" + then2 + '\'' +
                 ", now='" + now + '\'' +
                 ", uom='" + uom + '\'' +
                 ", currency='" + currency + '\'' +
                 '}';
     }
}

私はエラーを試してシミュレートするためのJUnitテストを書いたが、私のテストで機能します。

    @Test
    public void shouldConvertJsonProductListIntoPrice() {
        ObjectMapper objectMapper = new ObjectMapper();
        String content3 = "{\"products\": [{\"productId\": \"3525085\",\"title\": \"hush Tasha Vest Dress\", " +
                "\"price\": {\"was\": \"\",\"then1\": \"\",\"then2\": \"\",\"now\": \"59.00\",\"uom\": \"\",\"currency\": \"GBP\"}, " +
                "\"colorSwatches\": [{\"basicColor\": \"Red\",\"skuId\": \"237494589\"},{\"basicColor\": \"Blue\",\"skuId\": \"237494562\"}] " +
                "}]}";
        JavaType valueType = objectMapper.constructType(ProductList.class);
        ProductList readValue;
        try {
            readValue = objectMapper.readValue(content3, valueType);
            assertEquals("3525085", readValue.getProductList().get(0).productId);
            assertEquals("hush Tasha Vest Dress", readValue.getProductList().get(0).title);
            assertEquals("", readValue.getProductList().get(0).price.then1);
            assertEquals("59.00", readValue.getProductList().get(0).price.now);
            assertEquals("Blue", readValue.getProductList().get(0).colorSwatches[1].basicColor);
            assertEquals("237494562", readValue.getProductList().get(0).colorSwatches[1].skuId);
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }
    }

「今すぐ」フィールドをコメントした場合、私のRestapi呼び出しは完全に機能します、そして私は例外を見ません。それでは、 "Now"フィールドに問題があるようです、そしてここで私はそれが試みることに気づくようです"59.00"を文字列に変換する。これはFasterXMLコンバータにとって問題になる可能性がありますか?私はそれを助ける必要がありますか?

製品クラスは次のとおりです(ただし、これは私がAPI呼び出しをオフにしているフィールドのリストは非常に減少します)。

public class Product {

     @JsonProperty("productId")
     String productId;

     @JsonProperty("title")
     String title;

     @JsonProperty("colorSwatches")
     ColorSwatch [] colorSwatches;

     @JsonProperty("price")
     Price price;

     public Product(){
         // blank required for Jackson
     }

     public Product(String productId, String title, ColorSwatch[] colorSwatches, Price price){
         this.productId = productId;
         this.title = title;
         this.colorSwatches = colorSwatches;
         this.price = price;
  }
3
robbie70

エラー状態は、 [〜#〜]値[〜#〜]value_string(好ましく)、astart_object、そうすることができます。あなたの問題はおそらくフォームのJSONから来ています

"price": {
    "was": "",
    "then1": "",
    "then2": "",
    "now":  {
        ...
    }
    "uom": "",
    "currency": "GBP"
},

コードによって予想される"now": "some value"形式の代わりに。

10
Loïc Le Doyen