Hi,
I have something like the following code:

@JsonIgnoreProperties(ignoreUnknown = true)
public class DataBean {

 private final String val;

 @JsonCreator
 public DataBean(@JsonProperty(value = "val") String val) {
                 this.val = val;
 }

 public String getVal() {
                 return val;
 }
 
 public List<String> getList(){
                 return new ArrayList<>();
 }


 @Override
 public String toString() {
                 return "DataBean [val=" + val + "]";
 }
 public static void main(String[] args) throws Exception {
                 ObjectMapper om = new ObjectMapper();
                 String json;
                 DataBean out;
                  json = "{\"list\":[\"11\"],\"val\":\"VAL2\"}";
                 out = om.readerFor(DataBean.class).readValue(json);
                 System.out.println("this is ko" + out);
 }
}

When I run the test I get: "java.lang.UnsupportedOperationException: Should 
never call `set()` on setterless property ('list')". If I modify the JSON, 
having the value of the constructor as first field, it runs OK. 

         json = "{\"val\":\"VAL2\",\"list\":[\"11\"]}";
         out = om.readerFor(DataBean.class).readValue(json);
         System.out.println("this is ok: " + out);

I know that I can solve it setting MapperFeature.USE_GETTERS_AS_SETTERS to 
false, but I can't. 

In order to solve the issue, I try the following orrible patch:

diff --git 
a/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
 
b/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
index 9c80e49..ca7ec85 100644
--- 
a/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
+++ 
b/src/main/java/com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.java
@@ -3,6 +3,8 @@
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.List;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
@@ -144,7 +146,21 @@
 
     @Override
     public final void set(Object instance, Object value) throws 
IOException {
-        throw new UnsupportedOperationException("Should never call `set()` 
on setterless property ('"+getName()+"')");
+    if(value instanceof Collection) {
+    
+    Collection<Object> collection = (Collection<Object>) value;
+ Collection<Object> toModify;
+    try {
+    toModify = (Collection<Object> )_getter.invoke(instance, (Object[]) 
null);
+    toModify.addAll(collection);
+    } catch (Exception e) {
+    _throwAsIOE((JsonParser)null, e);
+    return; // never gets here
+    }
+    
+    } else {
+    throw new UnsupportedOperationException("Should never call `set()` on 
setterless property ('"+getName()+"')");
+    }
     }
 
     @Override+    Collection<Object> collection = (Collection<Object>) 
value;

Is there any other way or patch to solve it?

Thanks,
Luca 

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/d7256c72-0379-4ffa-9968-f306d31ed65b%40googlegroups.com.

Reply via email to