SpringMVC(九)处理 JSON:使用 HttpMessageConverter

一、处理 JSON

1. 加入 jar 包:

2. 编写目标方法,使其返回 JSON 对应的对象或集合

3. 在方法上添加 @ResponseBody 注解

二、HttpMessageConverter<T>

HttpMessageConverter<T>是 Spring3.0 新添加的一个接 口,负责将请求信息转换为一个对象(类型为 T),将对象( 类型为 T)输出为响应信息

HttpMessageConverter<T>接口定义的方法:

Boolean canRead(Class?clazz,MediaType mediaType): 指定转换器 可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对 象,同时指定支持 MIME 类型(text/html,applaiction/json等)

Boolean canWrite(Class?clazz,MediaType mediaType):指定转换器 是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型在MediaType 中定义。LIst getSupportMediaTypes():该转换器支持的媒体类型。

T read(Class clazz,HttpInputMessage inputMessage):  将请求信息流转换为 T 类型的对象。

void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类型为 contentType。

HttpMessageConverter<T> 的实现类

DispatcherServlet 默认装配RequestMappingHandlerAdapter ,而RequestMappingHandlerAdapter 默认装配如下HttpMessageConverter:

加入 jackson jar 包后, RequestMappingHandlerAdapter装配的 HttpMessageConverter 如下:

使用 HttpMessageConverter 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:

(1)使用 @RequestBody / @ResponseBody 对处理方法进行标注

(2)使用 HttpEntity<T>/ ResponseEntity<T> 作为处理方法的入参或返回值

当控制器处理方法使用到 @RequestBody/@ResponseBody 或HttpEntity<T>/ResponseEntity<T> 时, Spring 首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或 泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用HttpMessageConverter 将报错

@RequestBody 和 @ResponseBody 不需要成对出现

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,635评论 1 92
  • 自己备忘,随便写 android网络框架源码解析及对比 android常用网络框架对比 Volley: 特点 基于...
    幻海流心阅读 1,566评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,147评论 19 139
  • 电影带给我们什么?仅仅是一个故事,一句经典的对白,一种思考或表达吗?这些我们通过阅读和交谈等其他的方式也同样可以得...
    精进的医生阅读 539评论 6 6
  • 四 (比赛开始) 因为时间缘故,本场虽分为四场,但是每场比赛时间为十分钟。 第一场,先是大二的学长控住了球。结果,...
    方喋阅读 383评论 0 0