专栏首页用户1337634的专栏Spring同时支持Json和Xml

Spring同时支持Json和Xml

项目中有时候需要同时支持XML和JSON格式的参数和返回值,如果是参数还比较容易处理,可以用String接收然后手动转换。 但是如果是返回值,则需要使用Spring框架自动转换,本文介绍如何在Spring框架实现Json和Xml

Jar包引用

  • pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

Java代码

  • UserController.java
@RestController
@RequestMapping("user")
public class UserController {
    @GetMapping(path = "/{id}", produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
    public User getUser(@PathVariable Integer id) {
        return User.builder().id(id).name("name." +id).build();
    }
}
  • User.java
@Data
@Builder
public class User {
    private Integer id;
    private String name;
}

使用

  • JSON
curl -X GET http://localhost:8080/user/2 -H 'Accept: application/json'
{
    "id": 2,
    "name": "name.2"
}
  • XML
curl -X GET http://localhost:8080/user/2 -H 'Accept: application/xml'
<User>
    <id>2</id>
    <name>name.2</name>
</User>

常见问题

  • Http status 406:请求中的Accept头不合法,或者不被服务器接受,一遍修改为application/jsonapplication/xml
  • Http status 415, Unsupported Media Type Content type '' not supported:因为服务器配置consumers={配置的内容},但是请求头中没有Content type,一般设置为application/jsonapplication/xml

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 灵魂拷问:Java 的 substring() 是如何工作的?

    在逛 programcreek 的时候,我发现了一些小而精悍的主题。比如说:Java 的 substring() 方法是如何工作的?像这类灵魂拷问的主题,非常值...

    沉默王二
  • 【译】设计优雅的 Rust 库 API

    原文见:https://deterministic.space/elegant-apis-in-rust.html

    MikeLoveRust
  • Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)

    本文是微信公众号【Java技术江湖】的《不可轻视的Java网络编程》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博...

    Java技术江湖
  • 【DB笔试面试690】在Oracle中,什么是分布式事务处理?

    现代数据库系统往往伴随着复杂的结构和环境,其中,分布式数据库组成是一个重要方面。系统后台的数据库系统不再是由单个数据库构成,而是由多台独立数据库、甚至是多台异构...

    小麦苗DBA宝典
  • 深入分析 Session 和 Cookie

    在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用...

    用户1516716
  • 聊聊rocketmq的adjustThreadPoolNumsThreshold

    本文主要研究一下rocketmq的adjustThreadPoolNumsThreshold

    codecraft
  • 谷歌软件工程师:我为什么喜欢用Go语言?

    Go语言最近几年逐渐获得越来越多的开发者的喜欢。在Go社区前不久刚刚庆祝Go诞生10周年生日之际,谷歌云软件工程师Benjamin Congdon发表个人博客,...

    新智元
  • 击穿JVM虚拟机

    首先我们需要了解什么是虚拟机,为什么虚拟机可以实现夸平台,虚拟机在计算机中扮演一个什么样的角色。

    兜兜毛毛
  • 芋道 Spring Boot MyBatis 入门(四)之 tkmybatis

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/ 「芋道源码」欢迎转载,保留摘要,谢谢!

    芋道源码
  • Apache RocketMQ原理(1)——服务端组件介绍

    获取上云帮助文档:http://rocketmq.cloud/zh-cn/blog/tocloud-catalog.html

    用户5224393

扫码关注云+社区

领取腾讯云代金券