johnzon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jin Kwon (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (JOHNZON-213) Make @JsonbTypeAdapter works with accessors
Date Sat, 15 Jun 2019 13:17:00 GMT

    [ https://issues.apache.org/jira/browse/JOHNZON-213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16864680#comment-16864680
] 

Jin Kwon commented on JOHNZON-213:
----------------------------------

[~romain.manni-bucau] Thank you.

I concluded that Apache Johnzon requires both getter and setter to be annotated with {{@JsonbTypeAdpater}}.

{code:java}
public class Child extends Parent<SomeOptions> {

    @JsonbTypeAdapter(SomeOptionsAdapter.class)
    @Override
    public SomeOptions getOptions() {
        return super.getOptions();
    }

//    @JsonbTypeAdapter(SomeOptionsAdapter.class)
    @Override
    public void setOptions(SomeOptions options) {
        super.setOptions(options);
    }
}
{code}

And I really want anyone to rethink about the meaning of accessing {{property}}.
When a field is supposed to be accessed via a term of {{property}} that means there will be
standard accessors(getter and setter).
But that doesn't mean both accessors need to be annotated with same annotation.

Apache Johnzon must detect {{@JsonbTypeAdapter}} only from either from getter or from setter.

How about following example?

{code:java}
    @JsonbProperty
    public String getExposed() {
        return hidden;
    }

    //@JsonProperty // required? Johnzon works without it.
    public void setExposed(final String exposed) {
        this.hidden = exposed;
    }

    @JsonbTransient
    private String hidden = "hidden";
{code}

Should {{setExposed}} be annotated with {{@JsonbProperty}}?

> Make @JsonbTypeAdapter works with accessors
> -------------------------------------------
>
>                 Key: JOHNZON-213
>                 URL: https://issues.apache.org/jira/browse/JOHNZON-213
>             Project: Johnzon
>          Issue Type: Bug
>          Components: JSON-B
>    Affects Versions: 1.1.12
>            Reporter: Jin Kwon
>            Priority: Major
>
> For some reasons, I need to annotate an overridden method with an {{@JsonbTypeAdapter}}.
> {code:java}
> class Parent<T extends ...> {
>     T options;
> }
> class Child extends Parent<SomeOptions> {
>     @JsonbTypeAdapter(value = SomeOptionsTypeAdapter.class)
>     public SomeOptions getOptions() {
>         return super.getOptions();
>     } 
> }
> {code}
> Now Johnzon complains.
> {code}
> javax.json.bind.JsonbException: Missing a Converter for type class ...Params$Options
to convert the JSON String '{"..."}' . Please register a custom converter for it.
> Caused by: org.apache.johnzon.mapper.MapperException: Missing a Converter for type class
...Params$Options to convert the JSON String '{"..."}' . Please register a custom converter
for it.
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message