3

Jackson 1.9.7 を使用して、Java オブジェクトから JSON を生成しています。

オブジェクトを JSON にシリアル化する方法は次のとおりです。

public String constructJson(Object object)
        throws EvaluationException {
    try {

        objectMapper.setSerializationConfig(
                objectMapper.getSerializationConfig()
                        .withSerializationInclusion(JsonSerialize.Inclusion.NON_NULL)
                        .withSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY)
                        .with(SerializationConfig.Feature.WRAP_ROOT_VALUE)
        );

        return objectMapper.writeValueAsString(object);

    } catch (IOException e) {
        LOGGER.error("Error", e);
        throw new EvaluationException("Error", e);
    }
}

XSD スキーマから生成された Java オブジェクトを渡していますが、注釈がありません。@XmlRootElementJackson にそのオブジェクトの名前を保持するように指示する方法はありますか?

現時点で生成されるものは次のとおりです。

{"": {
    "generatedId": "EA7EB141D9454433B5E24F374BF25118",....

それはあるべきですが:

{"theNameOfTheRoot": {
    "generatedId": "EA7EB141D9454433B5E24F374BF25118",....

オブジェクトマッパーにルートとして渡すクラスは次のようになります。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "EvaluationType", propOrder = {
    "generatedId",
    "style",
    "status",
    "candidate",
    "texts",
    "evaluationParts"
})
public class EvaluationType {
   .....
}

@XmlTypeそれで、Jackson に注釈から名前を取得するように指示する方法があるでしょうか? 誰もこれを解決する方法を知っていますか?

4

2 に答える 2

3

クラス定義の先頭にを置く場合は@XmlRootElement(name="EvaluationType")、名前を指定する必要があります。@XmlRootElementそれとも、何らかの理由でクラスにを追加できないと言っていますか?

アップデート

利用可能なものがない場合、Jackson2はJSONキーのクラス名を使用し@XmlRootElementます。Jackson 2には、Mavenの依存関係の新しいセットが必要です。具体的には次のとおりです。

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.1.3</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.1.2</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.1.3</version>
</dependency>
于 2013-02-06T13:18:27.493 に答える
0

バージョン 2.6 の場合、以下のように使用します

ObjectMapper objectMapper = new ObjectMapper();
JaxbAnnotationModule module = new JaxbAnnotationModule();
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);      
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE,true);
于 2015-08-04T10:38:19.270 に答える