Spring MVC的@ResponseBody返回JSON串

别再怕无霍尔BLDC了!手把手教你用反电动势过零检测搞定电机换向(附STM32代码片段) 本文详细介绍了无霍尔传感器BLDC电机的驱动方法,重点讲解反电动势过零检测技术及其在STM32上的实现。通过硬件电路设计、信号调理和软件算法优化,手把手教你完成电机换向控制,并提供实用的调试技巧和代码片段,帮助开发者快速掌握无霍尔BLDC驱动技术。 阅读详情
Xml代码 
<bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  
    <property name="messageConverters">  
  <list>  
   <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->  
  </list>  
</property>  
</bean>      
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />  

<bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > 
    <property name="messageConverters"> 
  <list> 
   <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 --> 
  </list> 
</property> 
</bean>   
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 

需要以下两个jar包: 

Xml代码 
<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.5.5" conf="runtime->default" />  
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.5.5" conf="runtime->default" />  

<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.5.5" conf="runtime->default" /> 
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.5.5" conf="runtime->default" /> 



Java代码 
@RequestMapping(value="/nogood", method=RequestMethod.GET)   
public @ResponseBody CmUser execute(String userid) {   
  CmUser u = new CmUser();   
  u.setAge(16);   
  u.setName("测试用户");   
  return u;   
}  



通过上面的代码可以实现java对象直接可以转json对象,下面是项目中的配置

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
                <property name="conversionService" ref="conversionService"/>
            </bean>
        </property>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
                <bean class="org.springframework.http.converter.StringHttpMessageConverter" >
                    <property name = "supportedMediaTypes">
                           <list>
                                   <value>text/plain;charset=UTF-8</value>
                          </list>
                     </property> 
                </bean>
                <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
                <!-- 注:开启此类需相关jar包持:javax.xml.bind.JAXBException
                <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
                 -->
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
            </list>
        </property>
    </bean>

下面分析@ResponseBody 注解

在SpringMVC中可以在Controller的某个方法上加@ResponseBody注解,表示该方法的返回结果直接写入HTTP response body中。

但是实际使用中发现最后生成的response中"Content-Type"的值不正确。

Spring使用AnnotationMethodHandlerAdapter来处理@ResponseBody,该类再使用一些HttpMessageConverter来具体处理信息。

AnnotationMethodHandlerAdapter使用request header中"Accept"的值和messageConverter支持的MediaType进行匹配,然后会用"Accept"的第一个值写入 response的"Content-Type"。

一般的请求都是通过浏览器进行的,request header中"Accept"的值由浏览器生成。

Chrome生成的值为application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

IE8生成的值为application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*

所以最后写入response中"Content-Type"的值为"application/xml"或"application/x-ms-application"。

但我们一般会在标注@ResponseBody的方法上返回String或byte[]类型的结果,期望的"Content-Type"的值应为"text/plain"或"application/octet-stream"。

这样导致了浏览器不能正确处理返回的内容。

实际上Spring在用HttpMessageConverter处理的过程中首先会判断response header中有没有写入"Content-Type",如果没有写入的话才会使用request header中"Accept"的第一个值。

但是由于Spring对HttpServletResponse进行了封装,实际上使用的是ServletServerHttpResponse,这个类有一个对真正的HttpServletResponse的引用。

判断response header的过程中使用的是ServletServerHttpResponse的getHeaders()方法,但该方法并没有返回真正的HttpServletResponse中的header。(这应该有问题吧?)

所以我们虽然可以在Controller的方法中加入对HttpServletResponse的引用,然后设置"Content-Type"的值,但是并不会起作用。

通过上面的分析,@ResponseBody看来是无法使用了。

还可以参考下面文章:http://www.iteye.com/topic/1124054

http://www.360doc.com/content/12/0809/11/9600761_229177035.shtml

http://blog.youkuaiyun.com/tanguang_honesty/article/details/12782523

飞塔防火墙之Link Monitor Link Monitor类似于SLA,飞塔防火墙线路质量探测的一个功能。 阅读详情

相关推荐

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

@ResponseBody响应头Content-Type不是application/json

后端使用@ResponseBody返回一个对象时,前端无法获取数据。检查发现响应体的Content-Type类型是text/html,需要引入jackson依赖。引入依赖后注意检查编译输出目录是否也有依赖!

m0_46635976的博客 1502

DPABINet保姆级教程:零代码完成脑网络分析与图论计算

本文提供DPABINet的零代码脑网络分析全流程指南。该工具通过图形化界面集成时间序列提取、连接矩阵构建、图论指标计算及统计分析,大幅降低技术门槛。重点解析了阈值选择、二值化与小世界属性计算等关键步骤,帮助研究者快速掌握脑网络分析与图论计算,提升科研效率与可重复性。

j2k3l4的博客 668

@ResponseBody详解

@ResponseBody详解 @ResponseBody的作用其实是将java对象转为json格式的数据。 @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。 注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。 @ResponseBody是作用在方法上的,@Respons 这里是引

qq_43602280的博客 605

教程 | VeriStand硬件在环仿真测试第一章

这篇是系列文章的第一章,满满的都是干货,感兴趣的话欢迎一起交流探讨。

HUASUITECH的博客 1万+

别让IO口保护二极管坑了你!实测讲解单片机电流倒灌的三种典型症状与防护

本文深入解析单片机电流倒灌的三大典型症状与防护方案,重点分析STM32等单片机在ADC采样异常、系统假死和通信速率异常中的表现。通过实测数据和电路设计建议,提供从基础二极管隔离到专业隔离器件的分级防护策略,帮助工程师有效预防和解决电流倒灌问题。

weixin_29280219的博客 346

@ResponseBody对content-type进行重写

1.@ResponseBody注解作用 @ResponseBody注解的作用是将Controller方法返回的对象通过适当的转换器(HttpMessageConverter)转换为指定的格式,并将其写入到response对象的body区,一般都是用来返回JSON数据或者XML数据。在使用此注解后,SpringMVC将不会再走视图处理器(即当方法上面没有写ResponseBody,底层会将...

随遇而安 1万+

【RT-DETR涨点改进】全网独家创新、细节涨点改进篇 | AAAI 2025 | 将 CEM 颜色增强模块引入RT-DETR ,目标检测不再惧怕雾天和低光检测、小目标检测、遥感目标检测高效涨点

本文提出了一种新型结构引导去雾网络(SGDN),通过双色引导桥(BGB)和色彩增强模块(CEM)有效解决雾霾图像去雾问题。BGB利用YCbCr空间的纹理特征引导RGB特征恢复,CEM通过聚合YCbCr通道信息增强RGB色彩感知。实验证明该方法在真实雾霾数据集上优于现有技术,能同时保持色彩准确性和纹理清晰度。文章还提供了完整的代码实现和模型配置指南,包括三种改进版RT-DETR网络结构(rtdetr-l/r18/r50-CEM.yaml),为图像去雾和目标检测任务提供了实用解决方案。

Ai缝合怪、助力小伙伴高效发论文 351

@ResponseBody不明原因返回content-type为text/html,强制返回application/json

最近项目中遇到一个不明原因的事件,springMVC中使用@ResponseBody返回数据,报错404。 使用调试工具查看发现response的content-type期望为application/json,但实际上是text/html,因此使用json的解析方法会报错,目前想到了两种方法解决: 1. 接收数据后使用JSON.parse(),将接收到的数据进行json转换; 2. 后台声明时添加...

bngdyz的博客 1万+

2025.05.29【Network】多组学分析:网络互作图绘制

本文介绍了使用R语言进行网络图绘制的方法与技巧。重点讲解了三个核心R包的使用:igraph用于网络图数据准备与基础绘制,ggraph基于图形语法实现高级可视化,networkD3则为网络图添加交互功能。文章涵盖了从基本概念、包安装、创建网络图对象,到自定义样式布局、添加交互性等完整流程,并提供了度分布、聚类系数等网络分析指标的计算方法。通过清晰的代码示例,帮助读者掌握生物信息学数据可视化的关键技能,为复杂数据的直观展示和分析提供实用工具。

227

基于 YOLOv26 的光伏板热斑检测系统:红外+可见光

本文提出了一种基于YOLOv26的光伏板热斑检测系统,采用红外+可见光双模态融合方案。系统架构包含数据预处理、热斑检测、故障诊断和维修决策等模块,结合无人机巡检与地面监控。关键技术包括YOLOv26目标检测模型、双模态数据融合、边缘计算部署等。研究构建了包含多种故障类型的光伏板专业数据集,并采用数据增强技术提升模型性能。系统实现了热斑检测、分类(轻微/中等/严重/危急)以及功率损失评估等功能,为光伏电站智能运维提供解决方案。

一键难忘的博客 497

Spring MVC的@ResponseBody返回JSON串时Content-Type编码问题

Xml代码                                                                      需要以下两个jar包:  Xml代码  default" />   default" />   default" />  default" />  Java代码  @Requ

不断成长的我 7701

Python 爬虫进阶:淘宝热卖商品价格走势抓取、反爬与分析全流程

在大数据时代,数据是商业决策的重要依据。电商平台上的商品价格走势,对于商家调整经营策略、消费者选择购买时机都有着关键的参考价值。本篇文章将深入解析如何利用 Python 爬虫抓取淘宝热卖商品的价格走势数据,并应对其中的反爬机制,最后对数据进行分析,带领大家领略 Python 爬虫在电商领域的强大应用。

yansideyucsdn的博客 1058

判断JSON是否为空 (用spring mvc @ResponseBody 自动返回的json串 )

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34346099的博客 212

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Rest风格自动返回Json格式的原因】

因为@ResponseBody的存在 它将方法的返回值,以特定的格式写入到response的body区域,然后将数据返回给客户端。 如果没有ResponseBody,底层会将返回值封装为ModelAndView对象。 如果返回值是字符串,那么直接将字符串写到客户端; 如果是一个对象,会将对象转化为json串,然后写到客户端。 另外: 编码问题: 如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMa

weixin_44460896的博客 611

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring mvc 返回json格式

第一次使用spring mvc ,在此也算是记录一下以防忘记,希望有经验的朋友指出不足的地方 一、使用maven管理jar。 org.codehaus.jackson jackson-core-lgpl 1.9.6 org.codehaus.jackson jackson-core-asl 1.9.4 org.codehaus.jackson jackson-ma

龙企阁 7万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring MVC的@ResponseBody返回JSON格式的数据

一控制器 package org.fkit.controller; import java.util.ArrayList; import java.util.List; import org.fkit.domain.Book; import org.springframework.stereotype.Controller; import org.springframework.web.b...

实践求真知 774

Spring MVC 返回数据

1、Tomcat 和 Servlet 分别是什么?有什么关系?Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是 Servlet 容器(遵循 Servlet 规范来实现的 Web 服务器),可以统一管理 Servlet (整个生命周期)。2、SpringMVC 和 Web 服务器,Servlet 的关系?SpringMVC 是内置的定制过的 Web 服务器,而 Web 服务器遵循 Servlet 规范。

2401_87463146的博客 1383

Spring MVC:精通JSON数据返回的几种高效方式

JSON数据返回的几种方式

weixin_52937170的博客 1811

使用@ResponseBody时候spring mvc的配置

1:项目中使用@ResponseBody时由于没有导入Jackson包添加到工程中,所以当返回数据时候,会报406错误 具体的截图错误如下

大辉的博客 6883
上一篇: Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
下一篇: Spring MVC之@RequestMapping 详解
AlvinTech14
博客等级 码龄12年 10粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值