On Thu, Nov 14, 2019 at 3:41 PM Guido Rost <[email protected]> wrote:

> You're right, that works. Now it looks way better. But there is no way of
> Jackson creating SetDeviceId without the @JsonCreator annotation?
>

Nope, not as general feature. Leaving that out would open potential
security holes, and there is ambiguity in 1-arg case regardless (whether
it's for "{ 'name' : value }" or just "value".

Although... your specific case can be covered by custom
`AnnotationIntrospector` that claims it totally saw "Creator annotation" in
there regardless. So you can add logic in... I forget name of method, you
can see that in `JacksonAnnotationIntrospector`.

-+ Tatu +-


> Thanks  a lot ,
> Guido
>
> On Thursday, November 14, 2019 at 3:18:43 PM UTC-8, Tatu Saloranta wrote:
>>
>> By quick look, would it not work if you declared type of delegated thing
>> as `RadiusAvp`, not Object?
>>
>> And if serialization needed, adding `@JsonValue` on that RadiusAvp field.
>>
>> -+ Tatu +-
>>
>>
>> On Tue, Nov 12, 2019 at 9:52 PM Guido Rost <[email protected]> wrote:
>>
>>> Hi Tatu,
>>> here is a little runnable file which shows my problem. I can make it
>>> work the delegation to the JsonCreator (commented out in SetDeviseId) but I
>>> was hoping to avoid this.
>>> Hopefully you can point me to what I am missing or doing wrong. Thanks
>>> so much.
>>>
>>> import com.fasterxml.jackson.annotation.*;
>>> import com.fasterxml.jackson.databind.ObjectMapper;
>>>
>>> import java.util.List;
>>>
>>> public class MyProblem {
>>>
>>>     ObjectMapper mapper;
>>>
>>>     @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = 
>>> JsonTypeInfo.As.WRAPPER_ARRAY, property = "name")
>>>     @JsonTypeName("radius-avp")
>>>     static public class RadiusAvp {
>>>         public String attribute;
>>>
>>>         public RadiusAvp() {
>>>         }
>>>
>>>         public RadiusAvp(String attribute) {
>>>             this.attribute = attribute;
>>>         }
>>>
>>>         public String toString() {
>>>             return "radius-avp = " + attribute;
>>>         }
>>>     }
>>>
>>>     @JsonTypeName("transform-rule")
>>>     static public class TransformRule {
>>>
>>>         public TransformRule() {
>>>         }
>>>
>>>         @JsonProperty("actions")
>>>         public List<SetDeviceId> actions;
>>>
>>>         public String toString() {
>>>             return "Transform-rule: " + actions.toString();
>>>         }
>>>     }
>>>
>>>
>>>     @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = 
>>> JsonTypeInfo.As.WRAPPER_ARRAY, property = "name")
>>>     @JsonTypeName("set-device-id")
>>>     static public class SetDeviceId  {
>>>
>>>         public RadiusAvp radiusAvp;
>>>
>>>         public SetDeviceId() {
>>>         }
>>>
>>> //         Uncomment this section to make this work (but we don't like this)
>>> //
>>> //        @JsonCreator
>>> //        public SetDeviceId(Object object) {
>>> //            ObjectMapper mapper = new ObjectMapper();
>>> //            radiusAvp = mapper.convertValue(object, RadiusAvp.class);
>>> //        }
>>>
>>>         public String toString() {
>>>             return "set-device-id: " + radiusAvp.toString();
>>>         }
>>>     }
>>>
>>>
>>>     public static void main(String[] args) throws Exception {
>>>         String json = 
>>> "{\"actions\":[[\"set-device-id\",[\"radius-avp\",\"nas-identifier\"]]]}";
>>>
>>>         ObjectMapper mapper = new ObjectMapper();
>>>         TransformRule transformRule = mapper.readValue(json, 
>>> TransformRule.class);
>>>         System.out.println(transformRule.toString());
>>>     }
>>> }
>>>
>>>
>>> On Tuesday, November 12, 2019 at 3:11:30 PM UTC-8, Tatu Saloranta wrote:
>>>>
>>>> On Mon, Nov 11, 2019 at 7:13 PM Guido Rost <[email protected]> wrote:
>>>> >
>>>> >
>>>> > I just posted the upper level class which contains the actions.
>>>> > The target type is SetDeviceId which contains a field of type
>>>> RadiusAvp. The construction of that is the actual problem
>>>>
>>>> Yes, please do tell me what I really need.
>>>>
>>>> -+ Tatu +-
>>>>
>>>> >
>>>> > --
>>>> > 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/e88ec00a-e3f1-453f-8eaf-f3fd83cf8422%40googlegroups.com.
>>>>
>>>>
>>> --
>>> 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/35ebdc5e-8084-4347-8280-06bd42127877%40googlegroups.com
>>> <https://groups.google.com/d/msgid/jackson-user/35ebdc5e-8084-4347-8280-06bd42127877%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> 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/f3efba48-41d6-4455-980b-e9d75231ed85%40googlegroups.com
> <https://groups.google.com/d/msgid/jackson-user/f3efba48-41d6-4455-980b-e9d75231ed85%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAGrxA26%3DQ692QNvQGZned4V%3DoGyZODTTK1%3D88dKuXyF3BwnuXg%40mail.gmail.com.

Reply via email to