I have tried to test the following code with no success:
class TestClass { private class ND2Customer { public String name; public String description; public String email; public Boolean multiuser; public String dnszone; public String uri; public String type; public ND2Customer() { } } @Test public void TestJackson() throws JsonParseException, JsonMappingException, IOException { String json="{\"description\": \"test1u\", \"dnszone\": \"test1.public.sevenltest.example.com.\", \"uri\": \"http://199.127.129.69/customer/test1\", \"multiuser\": true, \"type\": \"2.0.3-3146\", \"email\": \"[email protected]\", \"name\": \"test1\"}"; ObjectMapper mapper = new ObjectMapper(); ND2Customer casted=mapper.readValue(json, ND2Customer.class); String castedback=mapper.defaultPrettyPrintingWriter().writeValueAsString(casted); System.out.println(castedback); } }
This problem is different from this one: Deserializing JSON with Jackson - Why JsonMappingException "No suitable constructor"?
and this one: JsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object
and this one: JsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object
as I have manually override the default constructor, and its not a subclass.
How do I fix this problem?
ObjectMapper is the main actor class of Jackson library. ObjectMapper class ObjectMapper provides functionality for reading and writing JSON, either to and from basic POJOs (Plain Old Java Objects), or to and from a general-purpose JSON Tree Model (JsonNode), as well as related functionality for performing conversions.
Jackson uses default (no argument) constructor to create object and then sets value using setters. so you only need @NoArgsConstructor and @Setter.
Overview. When using JSON format, Spring Boot will use an ObjectMapper instance to serialize responses and deserialize requests. In this tutorial, we'll take a look at the most common ways to configure the serialization and deserialization options. To learn more about Jackson, be sure to check out our Jackson tutorial.
Yes, that is safe and recommended.
Make it static. Jackson can not deserialize to inner classes
The problem is probably that Jackson can't properly reach your ND2Customer
class to invoke its constructor because it is private
, as your class otherwise looks just fine. Try making it public
and seeing if that works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With