日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

返回Json和XML两种格式

發(fā)布時(shí)間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 返回Json和XML两种格式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于項(xiàng)目需要,同一接口支持根據(jù)參數(shù)不同返回XML和Json兩種格式的數(shù)據(jù),在網(wǎng)上看了很多大多是加后綴的方式來實(shí)現(xiàn)返回不同格式數(shù)據(jù)的,后來看了一篇http://www.importnew.com/27632.html 挺不錯(cuò),而且講解的很細(xì)致

(一) 返回不同格式的幾種方式

1) 改變請求后綴的方式改變返回格式

http://localhost:8080/login.xml

http://localhost:8080/login.json

2) 以參數(shù)的方式要求返回不同的格式

http://localhost:8080/login?format=json

http://localhost:8080/login?format=xml

3) 直接在修改controller中每個(gè)接口的請求頭,這種方式是指定該接口返回什么格式的數(shù)據(jù)

返回XML

            @GetMapping(value = "/findByUsername",produces = { "application/xml;charset=UTF-8" })

返回Json

@GetMapping(value = "/findByUsername",produces = { "application/json;charset=UTF-8" })

(二) 使用 1 、 2 兩種方式

主要就只有一個(gè)配置

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(true)   //是否支持后綴的方式
                .favorParameter(true)		//是否支持請求參數(shù)的方式
                .parameterName("format")	//請求參數(shù)名
        .defaultContentType(MediaType.APPLICATION_ATOM_XML); //默認(rèn)返回格式 
    }
}

有了這個(gè)配置之后,基本上第一種第二種都實(shí)現(xiàn)了,請求的時(shí)候json沒有問題,但是XML返回是空的,沒有任何返回,這是因?yàn)槟沩?xiàng)目中沒有xml的解析,

在pom.xml中加上

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

然后完美解決

方案一

方案二

(三) 第三種,指定返回格式

    @GetMapping(value = "/findByUsername",produces = { "application/xml;charset=UTF-8" })
    public ResponseResult findByUsername(String username){
        if ("admin".equals(username)){
            User user = new User();
            user.setUsername(username);
            user.setCity("中國");
            user.setSex("女");
            return new ResponseResult().setData(user);
        }else {
            return new ResponseResult("000000");
        }
    }

這個(gè)主要就是修改mapping注解中的produces = { "application/xml;charset=UTF-8" }

但是切記,第三種方式和前兩種方式不能同時(shí)存在,當(dāng)你加入了配置之后再使用第三種方式會導(dǎo)致找不到這個(gè)路徑,所以你自己看吧

(四) 在SpringBoot中在yml中配置

spring:
  mvc:
    contentnegotiation:
      #favor-path-extension: true  #這個(gè)配置了但是不能使用,具體原因未知,這里就直接注釋了
      favor-parameter: true
      parameter-name: Format

使用這個(gè)配置的方式可以不用寫代碼了,但是在靈活性上要稍微差一點(diǎn),但是如果你追求簡潔,這種方式又恰好能滿足你的需求,這也是個(gè)不錯(cuò)的選擇

https://github.com/SunArmy/result 這是在寫的時(shí)候一邊寫博客一邊寫Demo

總結(jié)

以上是生活随笔為你收集整理的返回Json和XML两种格式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。