2011-02-03 9 views
27

私はContentNegotiatingViewResolverのビュープロパティとしてJaxb2Marshallerを使用しています。私はXMLのrepsonseを得ることができます。どのようにフォーマット(かなり印刷)するのですか?春にjaxbからフォーマットされたxml出力を取得するには?

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="xml" value="application/xml" /> 
     </map> 
    </property> 
    <property name="defaultViews"> 
     <list> 

      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <constructor-arg> 
        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
         <property name="classesToBeBound"> 
          <list> 

          </list> 
         </property> 
        </bean> 
       </constructor-arg> 
      </bean> 
     </list> 
    </property> 

</bean> 

答えて

36
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> .... </list> 
    </property> 
    <property name="marshallerProperties"> 
     <map> 
      <entry> 
       <key> 
        <util:constant static-field="javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT" /> 
       </key> 
       <value type="java.lang.Boolean">true</value> 
      </entry> 
     </map> 
    </property> 
</bean> 
+0

ありがとう、それはトリックでした。 – outvir

21

あなたのマーシャラーオブジェクトにこのプロパティを設定してみてください:ここで

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE) 

Marshallerインタフェースの完全なJavadocのです。 Field Summaryセクションをチェックしてください。

8

Riteshの回答は私のためには機能しませんでした。私は、次の操作を行う必要がありました:

<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> ... </list> 
    </property> 
    <property name="marshallerProperties"> 
     <map> 
      <entry key="jaxb.formatted.output"> 
       <value type="boolean">true</value> 
      </entry> 
     </map> 
    </property> 
</bean> 
2

はこのために探していたと私は

@Bean 
public Marshaller jaxbMarshaller() { 
    Map<String, Object> props = new HashMap<String, Object>(); 
    props.put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 

    Jaxb2Marshaller m = new Jaxb2Marshaller(); 
    m.setMarshallerProperties(props); 
    m.setPackagesToScan("com.example.xml"); 
    return m; 
} 
0

使用同等jaxb.formatted.output代わりjavax.xml.bind.Marshallerのコードを共有しようと思いました。 JAXB_FORMATTED_OUTPUTとして

Map<String,Object> map = new HashMap<String,Object>(); 
map.put("jaxb.formatted.output", true); 
jaxb2Marshaller.setMarshallerProperties(map); 
関連する問題