【问题标题】:ResponseEntity returns String instead of xml type in spring bootResponseEntity 在 Spring Boot 中返回 String 而不是 xml 类型
【发布时间】:2017-01-05 10:06:20
【问题描述】:

我用过spring和weblogic, 我有这样的方法:

@RequestMapping(value = "/all/{parentId}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<String> getAll(@PathVariable int parentId) {
    StringBuffer returnValue = new StringBuffer("");
    Power power = iPowerService.loadByEntityId(parentId);
    makeTree(power, returnValue);
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.add("Content-Type", "text/html; charset=UTF-8");
    return new ResponseEntity<String>(returnValue.toString(), responseHeaders, HttpStatus.CREATED);
}

上述方法为树生成 xml 格式并将其作为响应发送给客户端,如下所示:

<201 Created,
<item text="primary" id="740167402" im0="Mehvar_V.png"
    im1="Mehvar_V.png" im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t740167402" />
</item>
<item
    text="fff"
    id="740168675" im0="Mehvar_V.png" im1="Mehvar_V.png" im2="Mehvar_V.png"
    isVirtual="true">
    <item text="..." im0="leaf.gif" id="t740168675" />
</item>
<item text="mmmehdi" id="12" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t12" />
</item>
<item text="province" id="123" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t123" />
</item>
<item text="power" id="1234" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t1234" />
</item>
,{Content-Type=[text/html; charset=UTF-8]}>

客户端将此响应转换为树并显示它。
它已成功运行
当我迁移到 Spring Boot 时,此方法的响应将转换为如下字符串:

"<item text="primary" id="740167402" im0="Mehvar_V.png"
    im1="Mehvar_V.png" im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t740167402" />
</item>
<item
    text="fff"
    id="740168675" im0="Mehvar_V.png" im1="Mehvar_V.png" im2="Mehvar_V.png"
    isVirtual="true">
    <item text="..." im0="leaf.gif" id="t740168675" />
</item>
<item text="mmmehdi" id="12" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t12" />
</item>
<item text="province" id="123" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t123" />
</item>
<item text="power" id="1234" im0="Mehvar_V.png" im1="Mehvar_V.png"
    im2="Mehvar_V.png" isVirtual="true">
    <item text="..." im0="leaf.gif" id="t1234" />
</item>"

如你所见""环绕我的输出

发生了什么以及为什么会发生?
为什么我的响应会向客户端发送字符串。
我希望输出与它成功工作的一样

【问题讨论】:

  • 尝试将produces = { "application/xml", "text/xml" } 添加到您的@RequestMapping

标签: spring tomcat spring-boot


【解决方案1】:

使用@ResponseBody,您不必将响应包装在新的ResponseEntity 中,您可以这样做:

@RequestMapping(value = "/all/{parentId}", method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String getAll(@PathVariable int parentId) {
  StringBuffer returnValue = new StringBuffer("");
  ...
  return returnValue.toString()
}

或者您可以直接删除响应正文:

@RequestMapping(value = "/all/{parentId}", method = RequestMethod.GET)
public ResponseEntity<String> getAll(@PathVariable int parentId) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 2022-06-14
    • 2016-11-02
    • 2020-05-24
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多