springMVC4.2返回日期格式化的json串,同时解决中文乱码

访问SpringMVC项目报这个错误this request is only capable of generating responses with characteristics not acceptable according to the request "acceptheaders.

意思大约是输出的内容类型不被接受。

在springmvc的配置文件里配置如下内容即可解决。

<mvc:annotation-driven>  
        <mvc:message-converters>  

    <bean class="org.springframework.http.converter.StringHttpMessageConverter" />

            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
            <list>
               <value>text/html;charset=UTF-8</value>
               <value>application/json;charset=UTF-8</value>
           </list>
            </property>  
                <property name="objectMapper">
                <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                    <property name="dateFormat">
                        <bean class="java.text.SimpleDateFormat">
                        <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
                        </bean>
                    </property>
                </bean>
                </property>  
            </bean>  
        </mvc:message-converters>  
    </mvc:annotation-driven> 

配置charset=UTF-8可以解决乱码问题。

配置objectMapper可以将返回json串中包含的日期类型进行格式化。

注意:@ResponseBody标识的方法要返回Map<String, Object>,不然日期可能不是格式化的。

另外,StringHttpMessageConverter这个Bean必须加在MappingJackson2HttpMessageConverter前面,因为MappingJackson2HttpMessageConverter会自动给返回的字符串加上双引号,StringHttpMessageConverter可以避免自动添加双引号的问题。


<think>好的,我需要帮助用户解决Postman返回数据格式不是JSON的问题。首先,我应该回想用户之前的问题,他提到过返回乱码的问题,现在遇到了返回数据格式非JSON的情况。根据之前的引用,用户可能已经尝试过设置Content-Type为application/json;charset=UTF-8来解决乱码,但现在的重点是如何确保返回的数据是JSON格式。 首先,我应该考虑常见的导致Postman返回JSON格式的原因。可能有几个方面: 1. **服务端未正确设置响应头**:如果服务端返回的数据虽然是JSON格式,但响应头中的Content-Type不是application/json,Postman可能无法自动识别,导致显示为文本或其他格式。这时候需要检查服务端的响应头设置。 2. **服务端返回的数据不是有效的JSON**:有时候服务端可能返回了格式错误的数据,比如JSON语法错误,或者根本不是JSON,比如HTML或纯文本。这时候Postman无法解析,会显示为其他格式。 3. **Postman设置问题**:虽然不常见,但Postman本身的设置可能会影响显示,比如自动格式化或插件干扰。 接下来,我需要根据这些可能的原因,给出具体的解决步骤。首先,检查响应头是否正确。用户可以在Postman的响应部分查看Headers,确认Content-Type是否为application/json。如果不是,可能需要调整服务端代码,确保正确设置响应头,例如在Spring中使用@ResponseBody或ResponseEntity时设置MediaType.APPLICATION_JSON。 如果响应头正确,但数据仍然无法解析,可能需要检查返回的数据是否符合JSON语法。用户可以在Postman中使用“Pretty”格式查看响应体,或者将内容复制到JSON验证工具中检查是否有语法错误,比如缺少引号、括号不匹配等。 另外,如果服务端返回的是非JSON数据,比如错误页面或HTML,这时候需要检查API的URL是否正确,或者服务端是否有错误处理机制返回了非JSON响应。例如,SpringMVC如果请求的URL以.html结尾,可能会默认期望HTML响应,导致406错误,这时候需要确保请求的URL正确,并且服务端配置正确的内容协商策略。 最后,可以考虑在Postman中使用自动解析功能,或者编写测试脚本来验证响应是否为JSON。例如,使用pm.response.to.have.jsonBody()来检查响应是否为有效的JSON,或者使用pm.response.json()尝试解析,如果失败则抛出错误。 总结下来,解决方案的步骤应该是: 1. 检查响应头中的Content-Type是否为application/json2. 确保服务端正确设置响应头。 3. 验证返回的数据是否为有效JSON4. 检查API端点是否正确,避免服务端返回JSON数据。 5. 使用Postman的测试功能自动验证JSON格式。 同时,根据用户之前的引用,可能需要确保服务端正确配置了消息转换器,比如Spring中引入Jackson库,避免因缺少依赖导致无法生成JSON响应。如果用户之前遇到过乱码问题,现在还要确保字符编码正确,避免因编码问题导致JSON解析失败。 最后,生成相关问题,帮助用户深入理解可能的相关问题,比如如何验证JSON格式,如何处理服务端错误配置,或者Postman的高级测试脚本使用。</think>### Postman返回数据格式非JSON解决方案 #### 1. 验证响应头格式 在Postman响应面板的**Headers**选项卡中检查`Content-Type`是否为`application/json`。若显示`text/html`或其他类型,说明服务端未正确设置响应头[^2]。 **解决方法**: - **后端代码显式声明**:在服务端代码中强制指定响应类型。例如: ```java @RequestMapping(value="/api", produces="application/json;charset=UTF-8") ``` - **Spring Boot配置**:通过配置文件设置默认响应类型: ```yaml spring: mvc: contentnegotiation: default-content-type: application/json ``` #### 2. 检查JSON数据有效性 在Postman的响应**Body**选项卡中切换为**Pretty**格式,若数据无法高亮显示或报错,说明JSON格式有误。 **解决方法**: - 使用在线工具(如[JSONLint](https://jsonlint.com/))验证数据格式。 - 修复服务端生成的JSON数据,确保语法正确,例如引号闭合、无多余逗号。 #### 3. 排查服务端路由配置 若请求的URL后缀为`.html`或`.xml`,可能导致Spring MVC优先返回对应格式的数据[^2]。 **解决方法**: - 修改API路径为无后缀形式,例如将`/data.html`改为`/data`。 - 配置内容协商策略,强制指定JSON为默认响应类型。 #### 4. 添加JSON解析测试脚本(高级) 在Postman的**Tests**选项卡中添加以下脚本,自动验证响应是否为有效JSON: ```javascript pm.test("Response is valid JSON", function() { try { pm.response.json(); // 尝试解析JSON pm.expect(pm.response.headers.get('Content-Type')).to.include('application/json'); } catch (e) { pm.expect.fail("响应不是有效的JSON格式"); } }); ``` 若测试失败,控制台会明确提示错误原因[^3]。 #### 5. 依赖库检查(Spring框架) 若服务端使用Spring Boot,需确保已引入JSON处理库(如Jackson)。检查`pom.xml`或`build.gradle`是否包含以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值