微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【SpringMVC】处理 JSON:使用 HttpMessageConverter

处理 JSON:使用 HttpMessageConverter

处理 JSON

  1. 加入 jar 包:

  2. 编写目标方法,使其返回 JSON 对应的对象或集合
  3. 方法添加 @ResponseBody 注解

    @ResponseBody
    @RequestMapping("/getUsers")
    public List<User> testAjax() {
        List<User> users = new ArrayList<>();
        users.add(new User(1,"a",new Date(),1000));
        users.add(new User(2,"b",2000));
        return users;
    }

HttpMessageConverter

  • HttpMessageConverter 是 Spring3.0 新添加一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
  • HttpMessageConverter接口定义的方法
    • 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<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为 T 类型的对象。
    • void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类 型为 contentType。

HttpMessageConverter 的实现类

  • dispatcherServlet 认装配 RequestMappingHandlerAdapter,而 RequestMappingHandlerAdapter 认装配如下 HttpMessageConverter:

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

使用 HttpMessageConverter

  • 使用 HttpMessageConverter 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
    • 使用 @RequestBody / @ResponseBody 对处理方法进行标注
    • 使用 httpentity / ResponseEntity 作为处理方法的入参或返回值
  • 当控制器处理方法使用到 @RequestBody/@ResponseBody 或 httpentity/ResponseEntity 时,Spring 首先根据请求头或响应头的 Accept 属性选择匹配的 HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter,若找不到可用的 HttpMessageConverter 将报错
  • @RequestBody 和 @ResponseBody 不需要成对出现

@RequestBody、@ResponseBody 示例


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐