api接口写好了?想过(Accept,Content-Type)?返回类型json|xml?

小说:微商真的有那么挣钱吗作者:文文侯更新时间:2018-11-14字数:20810

“都散开吧,别攻击我们。”白星双手紧握,双目比在一起,一副祈祷的样子,游动不断的黑影好像受到了某种召唤一般,居然意见统一的开始下沉。

现在小本钱做什么

“呼~我也不想拐弯抹角,在座有三位都是老面孔了,而两位又是年轻人相信都是会更加的果断,不管是解决哪一边的事情我想最快捷的方法莫过于五大隐村联合起来组成一个忍者联军,起码这个忍者联军在晓组织和刘皓解决之前是一体的,你们觉得如何。“自来也的魄力明显很强,也顺着雷影的话直接提出了这个方案。
此山比之前的几座大上许多,方圆千里内寸草不生,无人居住,一踏入千里范围,便可感觉到火山的热力扑来,祝融道:“此山内尽是鬼焰,我几万年的积累,大多在此了。”

老者皱眉:“以往姑娘的卦术从未出过差错,这次却连着错了几次。聂峰未死,目前倒还影响不大,但那薛仁贵却已从辽东回到京城,皇上命他统率飞骑镇守玄武门,已使我们的一些计划难以实施。”

api接口写好了?想过(Accept,Content-Type)?返回类型json|xml?

起因:

- A,B. A调用B提供的api接口.

- A:为毛你的接口返回的是xml格式的(浏览器访问)?给个json行不行?
- B:没问题啊,我们自己的程序一直在用 

测试

1. 测试demo

  • 新建一个spring boot RESTful API项目
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public User index() {

        List<String> testList = new ArrayList<String>();
        testList.add("aa");
        testList.add("bb");

        User user=new User();
        user.setName("Grace");
        user.setTestList(testList);

        return user;
    }
  • 浏览器地址栏访问,返回结果没问题,json数据

image

  • 默认是不支持xml的,请求头类型application/xml 无返回数据

image

2.更直观点看,spirng boot 集成swagger2 并设置 Response Content Type 支持xml,json类型

  • pom
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>
  • produces
//默认为 */* 
//支持xml,json 设置 produces = "application/xml,application/json")
@ApiOperation(value = "user", notes = "note", produces = "application/xml,application/json")
@RequestMapping(value = "/hello", method = RequestMethod.GET)
    public User index() {
  • 走起
  1. 注意 Accept,Content-Type , swagger 选择Response Content Type 受影响的是 request headers
  2. 当设置xml类型时 拿不到数据,状态码406
 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

image

3. 配置 spring boot RESTful API 支持xml

  • pom

      <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
      </dependency>
  • 再次走起

  1. 浏览器

image

  1. curl

image

  1. 注意对比不支持xml的截图 request headers ,内容一样本次为xml类型数据
  2. 服务器根据accept类型(jq ajax 也会推断下面说),从左到右一次匹配,推断返回内容类型 application/xhtml+xml 第二位匹配
  3. 即匹配规则为:最明确的优先匹配。

     Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  4. swagger 走一波
    image

4. 再来看下jQ 下ajax的情况

  • 走起
  1. 默认情况(不支持xml)
    image
  2. 配置支持xml
    image

  3. $.get(xx,xx,xx,dataType) dataType 默认的情况(*/*),按api文档说的jQ会智能推断
    image

总结下

  • 浏览器
  1. 在浏览器地址栏访问的情况下request header Accept:text/html, application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  2. 规则,从左到右依次匹配,推断返回内容类型.最明确的优先匹配.本文中xml,json 都支持下,优先选择xml
  • jQ ajax ,
  1. 默认情况下request header accept:*/*jQ会智能推断.如上来看json优先级较高
  2. 通过 dataType 设置 request header accept 类型
  • 开发层面的建议
  1. 涉及到跨组,跨部门,前后端分离的情况借用swagger媒介来沟通api接口情况
  2. 如有xml,json多格式支持的话,设置swagger Response Content Type 来达到多类型支持
  3. 优先使用json格式交互数据

--

  1. 有误的地方欢迎指正,交流

参考链接

  1. 匹配规则 http://blog.csdn.net/blueheart20/article/details/45174399
  2. 406 http://www.ruanyifeng.com/blog/2014/05/restful_api.html
  3. Http报头Accept与Content-Type的区别 http://www.cnblogs.com/-lzb/articles/5035629.html
  4. 推荐优先使用json https://www.cnblogs.com/jaxu/p/7908111.html#a_1
  5. jQ ajax dataType https://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

编辑:开扁秉安

发布:2018-11-14 02:59:43

当前文章:http://www.leetaemin.cn/news_42574.html

欠了很多钱走投无路了怎么办 自己在家用电脑赚钱 棋牌游戏赚赚钱 有哪些赚钱点子 网上挣钱的任务可靠吗 当当云微投资是真的吗 网上兼职工作可信吗 114oc兼职网

15514 75802 94122 30359 41373 7356179273 67714 57049

我要说两句: (0人参与)

发布