You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC 3.0.1 Controller如何将字符串以JSON格式返回?

Spring MVC 3.0.1 接口返回JSON Content-Type异常解决方案

Spring 3.0.1版本未支持@RequestMapping的produces属性,且@ResponseBody处理字符串返回值时,默认使用StringHttpMessageConverter,其默认编码为ISO-8859-1,默认Content-Type为text/plain,因此无法直接返回JSON类型响应。

方案1:Controller层返回ResponseEntity(无需修改全局配置,推荐)

直接在方法中手动指定响应头的Content-Type,3.0.x版本原生支持ResponseEntity,修改代码如下:

@RequestMapping(value = "/XXX")
public ResponseEntity<String> getResponse(String object) {
    // 原有业务逻辑保持不变,此处省略
    logger.info("jsonArray string: " + jsonArray.toString());
    
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json;charset=UTF-8");
    return new ResponseEntity<String>(jsonArray.toString(), headers, HttpStatus.OK);
}

该方案仅对当前接口生效,不影响其他接口逻辑

方案2:修改返回值类型,走Jackson自动序列化

你已经引入了Jackson依赖,只要将方法返回值从String改为实际要返回的对象类型(比如本例的JSONArray,或者自定义POJO),Spring会自动匹配MappingJacksonHttpMessageConverter进行序列化,自动返回application/json类型的响应:

@RequestMapping(value = "/XXX")
@ResponseBody
public JSONArray getResponse(String object) {
    // 原有业务逻辑保持不变,此处省略
    logger.info("jsonArray string: " + jsonArray.toString());
    return jsonArray;
}

方案3:全局配置消息转换器(适合所有接口统一返回JSON的场景)

在Spring MVC的核心配置文件(通常为dispatcher-servlet.xml)中,修改AnnotationMethodHandlerAdapter的消息转换器配置,覆盖默认的StringHttpMessageConverter编码和媒体类型:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <!-- 配置String类型返回的消息转换器,默认编码UTF-8,支持JSON类型 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                        <value>text/plain;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <!-- 配置Jackson对象序列化转换器 -->
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>
            </bean>
        </list>
    </property>
</bean>

该方案会全局生效,所有@ResponseBody返回String的接口都会使用该配置,若存在需要返回纯文本的接口需谨慎使用

内容的提问来源于stack exchange,提问作者Ibrahim Ates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:36:03