2017-09-14 13 views
0

spring-webを使用して、POST xmlリクエストをWebサービスに送信しています。しかし、私はjaxbの特性とそれを定義した方法レンダリングされません私のXml豆要求:Spring RestTemplateはXMLアノテーションを無視します(@XmlAttributeなど)?

//this class is autogenerated with xsdtojava from *.xsd files 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "myRequest") 
public class ServletRequest { 
    @XmlAttribute(name = "age") 
    private int age; 
} 

使用法:

ServletRequest req = new ServletRequest(); 
req.setAge(20); 

restTemplateBuilder.build().postForEntity(url, new HttpEntity<>(req), MyRsp.class); 

結果のXMLの送信である:

<ServletRequest> 
    <age>20</age> 
</ServletRequest> 

問題を:両方を@XmlRootElementという名前と@XmlAttribute注釈は無視されているようです。どうして?

java8と
+0

私は長い時間前に同様の問題を抱えていたし、私はそれがジャクソンのセットアップ後、春の詳細だと思います。おそらく既にこれを行っているでしょう.jaxbアノテーションhttps://github.com/FasterXML/jackson-module-jaxb-annotationsを使用するようにJackson Jaxbモジュールを登録する必要があります。私は実際に 'com.fasterxml.jackson.dataformat.xml.annotation'の' @JacksonXmlProperty(isAttribute = true) 'と' @JacksonXmlRootElement(localName = "document") 'を使用して終了しました – varren

+0

しかし、' xsdtojava'に'@ JacksonXmlProperty'を利用しますか?私はむしろ自動生成されたクラスを変更したくないでしょう... – membersound

答えて

0
@Bean 
public Jackson2ObjectMapperBuilderCustomizer jackson() { 
    return new Jackson2ObjectMapperBuilderCustomizer() { 
     @Override 
     public void customize(Jackson2ObjectMapperBuilder builder) { 
      builder.modules(new JaxbAnnotationModule()); 
     } 
    }; 
} 

あるいは短い:ジャクソンのよう

@Bean 
public Jackson2ObjectMapperBuilderCustomizer jackson() { 
    return (builder) -> builder.modules(new JaxbAnnotationModule()); 
} 

2.9.0これは、コア・ジャクソンライブラリの一部です。

、あなたが追加する必要があるだろう前:

<dependency> 
     <groupId>com.fasterxml.jackson.module</groupId> 
     <artifactId>jackson-module-jaxb-annotations</artifactId> 
     <version>2.8.x</version> 
    </dependency> 
関連する問題