0

Solve it by replacing all Date types to String

It's a JSON from marvel comics API I'm trying to deserialize and I'm getting

"com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance
of `com.example.demo.json2csharp.Date` (although at least one Creator exists): 
no String-argument constructor/factory method to deserialize from String value 
('2019-11-07T08:46:15-0500')"

, example of JSON:

{
  "code": 200,
  "status": "Ok",
  "copyright": "© 2021 MARVEL",
  "attributionText": "Data provided by Marvel. © 2021 MARVEL",
  "attributionHTML": "<a href=\"http://marvel.com\">Data provided by Marvel. © 2021 MARVEL</a>",
  "etag": "f712574873e89d0505dc68a908170fb7970d2f13",
  "data": {
    "offset": 0,
    "limit": 20,
    "total": 1,
    "count": 1,
    "results": [
      {
        "id": 82967,
        "digitalId": 0,
        "title": "Marvel Previews (2017)",
        "issueNumber": 0,
        "variantDescription": "",
        "description": null,
        "modified": "2019-11-07T08:46:15-0500",
        "isbn": "",
        "upc": "75960608839302811",
        "diamondCode": "",
        "ean": "",
        "issn": "",
        "format": "",
        "pageCount": 112,
        "textObjects": [
          
        ],
        "resourceURI": "http://gateway.marvel.com/v1/public/comics/82967",
        "urls": [
          {
            "type": "detail",
            "url": "http://marvel.com/comics/issue/82967/marvel_previews_2017?utm_campaign=apiRef&utm_source=9a0517af422c1dfbe132dbaf086fa7f7"
          }
        ],
        "series": {
          "resourceURI": "http://gateway.marvel.com/v1/public/series/23665",
          "name": "Marvel Previews (2017 - Present)"
        },
        "variants": [
          {
            "resourceURI": "http://gateway.marvel.com/v1/public/comics/82965",
            "name": "Marvel Previews (2017)"
          },
          {
            "resourceURI": "http://gateway.marvel.com/v1/public/comics/82970",
            "name": "Marvel Previews (2017)"
          }
        ],
        "collections": [
          
        ],
        "collectedIssues": [
          
        ],
        "dates": [
          {
            "type": "onsaleDate",
            "date": "2099-10-30T00:00:00-0500"
          },
          {
            "type": "focDate",
            "date": "2019-10-07T00:00:00-0400"
          }
        ],
        "prices": [
          {
            "type": "printPrice",
            "price": 0
          }
        ],
        "thumbnail": {
          "path": "http://i.annihil.us/u/prod/marvel/i/mg/b/40/image_not_available",
          "extension": "jpg"
        },
        "images": [
          
        ],
        "creators": {
          "available": 1,
          "collectionURI": "http://gateway.marvel.com/v1/public/comics/82967/creators",
          "items": [
            {
              "resourceURI": "http://gateway.marvel.com/v1/public/creators/10021",
              "name": "Jim Nausedas",
              "role": "editor"
            }
          ],
          "returned": 1
        },
        "characters": {
          "available": 0,
          "collectionURI": "http://gateway.marvel.com/v1/public/comics/82967/characters",
          "items": [
            
          ],
          "returned": 0
        },
        "stories": {
          "available": 2,
          "collectionURI": "http://gateway.marvel.com/v1/public/comics/82967/stories",
          "items": [
            {
              "resourceURI": "http://gateway.marvel.com/v1/public/stories/183698",
              "name": "cover from Marvel Previews (2017)",
              "type": "cover"
            },
            {
              "resourceURI": "http://gateway.marvel.com/v1/public/stories/183699",
              "name": "story from Marvel Previews (2017)",
              "type": "interiorStory"
            }
          ],
          "returned": 2
        },
        "events": {
          "available": 0,
          "collectionURI": "http://gateway.marvel.com/v1/public/comics/82967/events",
          "items": [
            
          ],
          "returned": 0
        }
      }
    ]
  }
}

My Date class, like all the others class used in ObjectMapper, was generated at https://json2csharp.com/json-to-pojo:

public class Date {
    @JsonProperty("type")
    public String getType() {
        return this.type;
    }

    public void setType(String type) {
        this.type = type;
    }

    String type;

    @JsonProperty("date")
    public Date getDate() {
        return this.date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
    Date date;


    public Date() {
    }
}

The method calling the mapper is this:

@PostMapping
    public Root getComic(@RequestBody ComicPostRequestBody comicPostRequestBody) throws NoSuchAlgorithmException, URISyntaxException, IOException {
        URI uri = comicService.makeUrl(comicPostRequestBody.getComicId());
        String json = client.getComic(uri);
        ObjectMapper mapper = new ObjectMapper();
        Root comicWrapper = mapper.readValue(json, Root.class);
        return comicWrapper;
    }

Root is the Class that contains all properties

public class Root {
    int code;
    String status;
    String copyright;
    String attributionText;
    String attributionHTML;
    String etag;
    Data data;

    @JsonProperty("code")
    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    @JsonProperty("status")
    public String getStatus() {
        return this.status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @JsonProperty("copyright")
    public String getCopyright() {
        return this.copyright;
    }

    public void setCopyright(String copyright) {
        this.copyright = copyright;
    }

    @JsonProperty("attributionText")
    public String getAttributionText() {
        return this.attributionText;
    }

    public void setAttributionText(String attributionText) {
        this.attributionText = attributionText;
    }

    @JsonProperty("attributionHTML")
    public String getAttributionHTML() {
        return this.attributionHTML;
    }

    public void setAttributionHTML(String attributionHTML) {
        this.attributionHTML = attributionHTML;
    }

    @JsonProperty("etag")
    public String getEtag() {
        return this.etag;
    }

    public void setEtag(String etag) {
        this.etag = etag;
    }

    @JsonProperty("data")
    public Data getData() {
        return this.data;
    }

    public void setData(Data data) {
        this.data = data;
    }

    public Root() {
    }
}

My final goal is to create a comic with:

results.id
results.title
results.description
results.isbn
results.price

I'm new to programming at all and the way I found to do it was to deserialize all the json into a Root, so I can get all these properties like root.getData().getResults() If there's a simple way to solve this or to deserialize this JSON I'll be glad to know

Thanks

0 Answers0