DebugEN
科技森
专注于Java开发~每天都会更新文章~
  1. 首页
  2. Java
  3. 正文

[原创] spring-boot返回json或者xml格式的数据

2021年02月03日 1415点热度 0人点赞 0条评论 作者: kejisen

前言

我们提供接口给前端,或者是其他应用系统,又或者是与第三方对接的时候,总会以json或者是xml的方式与对方交互,本文将介绍使用spring-boot的时候,如何将想响应自动转换为json或者xml格式的字符串

手动调用第三方库转换

最笨的方法是直接将DTO对象转成string类型后返回,如下所示:

    @RequestMapping("/test1")
    @ResponseBody
    public String fastjson() {
        Map<String, Object> res = new HashMap<>();
        res.put("site", "debugcn.com");
        res.put("title", "DebugCN");
        return JSON.toJSONString(res);
    }

调用返回:

$ curl localhost:8080/test1
{"site":"debugcn.com","title":"DebugCN"}

直接返回dto

其实不需要自己将其转换为json,框架自己已经做好了相关的处理:

    @RequestMapping("/test2")
    @ResponseBody
    public Map<String, Object> json() {
        Map<String, Object> res = new HashMap<>();
        res.put("site", "debugcn.com");
        res.put("title", "DebugCN");
        return res; 
    }

调用返回:

$ curl localhost:8080/test2
{"site":"debugcn.com","title":"DebugCN"}

返回XML

假如我想返回xml该怎么办呢,百度出来的都是各种老掉牙的方法,其实spring-boot早就提供了相关的注解:

你可以使用produces注解,标注这个方法返回的是xml格式的数据

    @RequestMapping(value = "/test3", produces = MediaType.APPLICATION_ATOM_XML_VALUE)
    @ResponseBody
    public Map<String, Object> xml() {
        Map<String, Object> res = new HashMap<>();
        res.put("site", "debugcn.com");
        res.put("title", "DebugCN");
        return res;
    }

光是这样还不够,那还需要添加jackson与xml相关的依赖:

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

这样就可以调用了:

$ curl localhost:8080/test3
<Map><site>debugcn.com</site><title>DebugCN</title></Map>

既能返回json又能返回xml

有同学说,这不是扯淡吗,怎么可能一个接口既能返回json又能返回xml?其实我们可以利用http协议请求头中的accept,其实spring-boot的controller已经做好支持了,不需要我们写一行代码,我们回到第一个示例:

    @RequestMapping("/test2")
    @ResponseBody
    public Map<String, Object> json() {
        Map<String, Object> res = new HashMap<>();
        res.put("site", "debugcn.com");
        res.put("title", "DebugCN");
        return res; 
    }

我们在请求头中增加 accept:application/xml,然后再调用:

$ curl -H "accept:application/xml" localhost:8080/test2
<Map><site>debugcn.com</site><title>DebugCN</title></Map

神奇的一幕发生了。

总结

本文介绍了如何在spring-boot的controller中返回json以及xml格式的数据,并没有网上那些所谓的教程那么复杂,spring-boot已经为你做好了一切。

标签: json spring springboot
最后更新:2021年03月03日

kejisen

保持饥渴的专注,追求最佳的品质

点赞
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 【原创】这些年我用过的IDEA插件 【原创】在windows上使用VNC远程连接linux桌面 我在RxJava使用线程池时遇到的问题 [原创文章] Swagger生成pdf格式的接口文档 [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 如何从 Git 的提交历史记录中删除大文件 [翻译] 创建一个只读的Repository接口(Spring Data) [翻译] 反射的用法——用Java调用私有方法 Java 虚拟机最多可以支持多少个线程? 排查Hibernate的慢查询日志–这是查找慢查询的最简单方法 [翻译] 使用apache poi在excel文件中插入一行数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 从QQ音乐网页版扒歌词的补充说明 [原创] 介绍java maven项目的多种打包方式 原创——在Java中生成随机数 将G1垃圾回收的内存使用量减少20%(翻译) [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道
[原创] 在ubuntu18.04上安装chromedriver 使用Spring RestTemplate压缩请求 将G1垃圾回收的内存使用量减少20%(翻译) [原创文章] Swagger生成pdf格式的接口文档 从QQ音乐获取并解析音乐的歌词 在Java中生成随机的日期 原创——在Java中生成随机数 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道 [翻译] 创建一个只读的Repository接口(Spring Data) java maven项目的几种打包方式 Spring Boot的@RequestMapping注解中加斜杠与不加斜杠的区别 【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 [原创] java8 lambda表达式的toMap造成的空指针异常 [翻译] 反射的用法——用Java调用私有方法 [原创] 如何使用okhttp发起application/json类型的请求 【原创】在windows上使用VNC远程连接linux桌面 中通Elasticsearch集群运维实践 [原创] 在spring-boot中使用querydsl 如何设置Servlet的session超时时间 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码
标签聚合
java spring maven qq音乐 歌词 linux elasticsearch base64 json springboot

COPYRIGHT © 2020 Kejisen. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS