6

Jackson アノテーションを使用して、シリアル化中に生成された json ラベルの名前を変更しようとしています。注釈はすべて正常にコンパイルされ、実行すると、Jackson のすべての注釈が完全に無視されることを除いて、Jackson のシリアル化が機能します。@JsonIgnore や @JsonProperty のような基本的なものでさえ、json 応答には影響しません。ビルドパスにあるライブラリは次のとおりです。

jsr311-qpi-1.1.1.jar
jackson-[core|databind|annotations]-2.2.0.jar

外部プログラムを次のように設定して、jetty 外部プログラムを実行している Eclipse 内で実行しています。

Location: .../apache-maven-2.2.1/bin/mvnDebug.bat
working Directory: ${workspace_loc:/ohma-rest-svr}
Arguments: jetty:run

Remote Java Application 構成を次のように設定します。

Host: localhost
Port: 8000

エラーメッセージが表示されないので、試してみることができません。どんなアイデアでも大歓迎です。

シリアル化する必要があるクラスのコード サンプルを次に示します。

@XmlRootElement(name="ads-parameter")
public class DefineParameterResponse {

    private Date _createdAt = new Date();

    @JsonProperty("created-at")
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET")
    @XmlElement
    public String getCreatedAt() {
        return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(_createdAt);
    }

    @JsonProperty("created-at")
    public void setCreatedAt(Date createdAt) {
        this._createdAt = createdAt;
    }


    private String _dataTitle1 = "Default Title1";
    @XmlElement
    @JsonProperty("data-title-1")
    public String getDataTitle1() {
        return _dataTitle1;
    }

    @JsonProperty("data-title-1")
    public void setDataTitle1(String dataTitle1) {
        this._dataTitle1 = dataTitle1;
    }


    @XmlElement
    @JsonProperty("data-title-2")
    public String getDataTitle2() {
        return _dataTitle2;
    }

    @JsonProperty("data-title-2")
    public void setDataTitle2(String dataTitle2) {
        this._dataTitle2 = dataTitle2;
    }
4

2 に答える 2

30

比較的一般的な理由の 1 つは、「間違った」一連のアノテーションを使用しようとすることです。Jackson 1.x と Jackson 2.x のアノテーションは異なる Java パッケージにあり、データバインドはメジャー バージョンと一致する必要があります。この設計には、1.x バージョンと 2.x バージョンを並べて使用できるという利点があり、クラス ロードの競合が発生しません。ただし、バージョンが一致していることを確認する必要があるという欠点があります。

最大の問題は、フレームワークによる使用です。多くの JAX-RS 実装 (Jersey など) は、まだデフォルトで Jackson 1.x を使用しています。したがって、Jackson 1.x を間接的に使用している可能性があると推測していますが、Jackson 2.x 注釈を追加しています。その場合は、org.codehaus.jackson代わりに 1.x アノテーション ( の下のもの) を使用する必要があります。

于 2013-09-12T05:17:13.660 に答える