복붙노트

[SPRING] 봄에 jaxb에서 형식화 된 xml 출력을 얻으려면 어떻게해야합니까?

SPRING

봄에 jaxb에서 형식화 된 xml 출력을 얻으려면 어떻게해야합니까?

Jaxb2Marshaller를 ContentNegotiatingViewResolver의 뷰 속성으로 사용하고 있습니다. xml repsonse를 얻을 수 있습니다. 어떻게 포맷팅 (예쁜 인쇄)합니까?

<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>

해결법

  1. ==============================

    1.

    <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>
    
  2. ==============================

    2.marshaller 객체에서이 속성을 설정해보십시오.

    marshaller 객체에서이 속성을 설정해보십시오.

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

    Marshaller 인터페이스를위한 전체 Javadoc이 있습니다. 필드 요약 섹션을 확인하십시오.

  3. ==============================

    3.Ritesh의 대답은 나를 위해 작동하지 않았다. 나는 다음을해야했다.

    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>
    
  4. ==============================

    4.이걸 찾고 있었고 코드를 공유 할 줄 ​​알았어.

    이걸 찾고 있었고 코드를 공유 할 줄 ​​알았어.

    @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;
    }
    
  5. ==============================

    5.javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT 대신에 jaxb.formatted.output를 다음과 같이 사용하십시오.

    javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT 대신에 jaxb.formatted.output를 다음과 같이 사용하십시오.

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("jaxb.formatted.output", true);
    jaxb2Marshaller.setMarshallerProperties(map);
    
  6. from https://stackoverflow.com/questions/4882988/how-to-get-formatted-xml-output-from-jaxb-in-spring by cc-by-sa and MIT license