【问题标题】:converting String to xml Response in Spring rest在 Spring rest 中将 String 转换为 xml 响应
【发布时间】:2015-12-15 17:14:21
【问题描述】:

我正在开发 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>

即字符串值(xml1 和 xml2 也应转换为 xml)。但我得到如下:

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

其中的 xml(xml1 和 xml2)不会转换为 xml,而是显示为元素的字符串值。任何人都可以帮助我获得例外的输出。 提前致谢。

【问题讨论】:

  • 我相信您可能需要一个带有代码和 id 成员的 TriggerProcess 类。然后,您可以将列表 添加到您的 RepsonseDTO 类中。
  • 感谢您的意见。但我在这里面临的问题是字符串 xml1 和 xml2 是动态的。 xml 字符串的元素会有所不同。在这种情况下,TriggerProcess 类的元素也应该有所不同
  • 当你说变化时,它们究竟是如何变化的?您每次都会得到带有不同元素的 triggerProcess ,否则会出现其他东西而不是 triggerProcess
  • 比如说:有时 xml1 = "true " 有时 xml1 会变成 true 01。意思是说xml的元素会不断变化

标签: java xml spring jaxb spring-rest


【解决方案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;
}

【讨论】:

  • 感谢您的意见 Arkantos。但我在这里面临的问题是字符串 xml1 和 xml2 是动态的。 xml 字符串的元素会有所不同。在这种情况下,TriggerProcess 类的元素也应该有所不同。
  • xml 字符串的元素有所不同。它们在什么意义上有所不同?如果您确定总会有带有 5 个say 元素的triggerProcess 元素(都是可选的),那么您可能会在triggerProcess 中获得2 个孩子或3 个孩子或全部5 个孩子。这是您的 xml 字符串的变化方式吗?
【解决方案2】:

我看不出你显示的 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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多