在Spring rest中将String转换为xml响应

时间:2015-12-15 17:14:22

标签: java xml spring jaxb spring-rest

我正在开发spring-boot rest应用程序,我有一个场景需要发回一个xml响应。我为此创建了一个JAXB类,如下所示:

@XmlRootElement(name = "Response")
public class ResponseDTO{

private String success;
private List<String> xmls; 

}

我的控制器类如下:

public class MyController{

@RequestMapping(value = "/processrequest/v1", method = RequestMethod.POST,      produces = "application/xml")
public ResponseEntity processHotelSegments(@RequestBody String xmlString) {
    ResponseDTO response = new ResponseDTO();
    response.setSuccess("true");

    String xml1 = "<triggerProcess id = '1'><code>true</code>    </triggerProcess>";
    String xml2 = "<triggerProcess id = '2'><code>false</code></triggerProcess>";
    List<String> list = new ArrayList<>();
    list.add(xml1);
    list.add(xml2);


    response.setXmls(list);
    return new ResponseEntity<>(response, HttpStatus.CREATED);

}
}

我期待xml响应如下:

<Response>
    <success>true</success>
        <xmls>
            <triggerProcess id = '1'>
                <code>true</code>
            </triggerProcess>
            <triggerProcess id = '2'>
                <code>false</code>
            </triggerProcess>
        </xmls>
</Response>

即,String值(xml1和xml2也应该转换为xml)。但我得到如下:

<Response>
    <success>true</success>
        <xmls>
            <triggerProcess id = '1'><code>true</code></triggerProcess><triggerProcess id = '2'><code>false</code></triggerProcess>
        </xmls>
</Response>

其中xmls(xml1和xml2)未转换为xml,而是显示为元素的String值。任何人都可以帮助我获得输出作为例外。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您正在将xmls捕获为字符串列表而不是对象列表。如果你希望捕获xmls的子对象作为对象,那么你需要在JAXB对象中以这种方式定义它们,如下所示。将您的xmls更改为代表TriggerProcess元素的triggerProcess对象列表。

@XmlRootElement(name = "Response")
public class ResponseDTO{

private String success;
private List<TriggerProcess> xmls; 

}

@XmlRootElement(name = "triggerProcess")
class TriggerProcess{
   @XmlAttribute
   private String id;
   @XmlElement
   private String code;
}

答案 1 :(得分:0)

我无法看到xml之间的任何区别,您显示:

<强>首先

<Response>
    <success>true</success>
        <xmls>
            <triggerProcess id = '1'>
                <code>true</code>
            </triggerProcess>
            <triggerProcess id = '2'>
                <code>false</code>
            </triggerProcess>
        </xmls>
</Response>

第二次(格式化后)

<Response>
    <success>true</success>
        <xmls>
            <triggerProcess id = '1'>
                <code>true</code>
            </triggerProcess>
            <triggerProcess id = '2'>
               <code>false</code>
            </triggerProcess>
        </xmls>
</Response>

你的问题是什么?可能,一切都好吗?