Spring 4.X 将响应的内容类型设置为 XML

Spring 4.X set content-type of response to XML

我目前正在使用 Spring 构建一个网络应用程序。我的前端应用程序以 XML 格式请求其数据。这在除 Internet Explorer 和 MS Edge 之外的所有浏览器中都可以正常工作。他们都将响应标记为 Text/HTML,这似乎是前端使用的 javascript 组件的问题。

如何将响应标记为 application/xml?这是生成响应的 Java 代码:

   @RequestMapping(value = "/dashboardData",  method = RequestMethod.GET, produces="application/xml")
   @ResponseBody
   public ModelAndView getBereichsleiterData() {
       HashMap<String, Object> model = new HashMap();
       List<Map<String, Object>> data = dataProvider.getEintraege();


       model.put("total_count",dataProvider.getEintraegeCount());
       model.put("pos_start",0);
       model.put("table", data);

       return new ModelAndView("data/gridData", model);
   }

而 data/gridData 下的文件是一个 .jsp 用于呈现 XML:

<%@ page language="java" contentType="text/html; charset=UTF-8" 

pageEncoding="UTF-8" %>
<%@ page isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<?xml version="1.0" encoding="UTF-8"?>
<rows total_count='${total_count}' pos='${pos_start}'>
<c:set var="id" value="${pos_start}" scope="page" />
    <c:forEach var="entry" items="${table}" varStatus="loop">
    <c:set var="id" value="${id + 1}" scope="page"/>
        <row id='${id}'>
            <cell>${entry.GEN_REKL_KEY}</cell>
            <cell>${entry.ART}</cell>
            <cell>${entry.WGR}</cell>
            <cell>${entry.EAN}</cell>
            <cell>${entry.HERSTELLER_NAME}</cell>
            <cell>${entry.BETRIEB}</cell>
            <cell>${entry.STATUS_ID}</cell>
            <cell>${entry.PROZESS_START}</cell>
            <cell>${entry.LETZTE_BEARBEITUNG}</cell>
            <cell>${entry.AKT_BENUTZER_NAME}</cell>
        </row>
    </c:forEach>
</rows>

您正在自行设置内容类型。检查 JSP 的第一行。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

那清楚地说明了 contentType="text/html; charset=UTF-8"...所以我认为实际上在这种情况下 IE 和 EDGE 是正确的而其他的是错误的...

将内容类型更改为您想要的并完成它。