小白云天 2018-12-23 22:50 采纳率: 0%
浏览 4328
已结题

在java代码中创建的 application/json 类型的请求 和 postman中的 application/json类型的请求有什么区别?

问题描述

问题是这样的,有一个controller接口,我使用java代码可以调通这个接口
但是用postman调用就不可以。可是我设置的参数都是一样的。下面是详细代码。

代码

  • controller里的接口:
    public String query(@RequestParam String name, HttpServletRequest request){
        System.out.println(name);
        return "hello";
    }
  • 使用java代码调用接口:
@Test
    public void query() throws Exception {
        String result = mockMvc.perform(
                get("/user")
                        .param("name", "sen")
                        .contentType("application/json"))
                        .andExpect(status().isOk())
                        .andReturn().getResponse().getContentAsString();

        System.out.println(result);
    }

根据我的开发经验,如果请求头里的contentType为**"application/json"**的话,后台controller参数要加**@RequestBody**注解,接口才能调通。但是,上面的java代码,controller里面没有@RequestBody这个注解,同样调通了接口。而我用postman调用的时候却失败了。

  • postman调用接口 图片说明

请求报文是这样的:

图片说明

但postman的这种方式调用后台接口直接失败了。然后我再postman中,使用form-data方式是可以调通接口的。

  • 问题重申

因此我就想问下,为啥java代码里面创建的 application/json 类型的请求为啥可以而postman中的 application/json类型请求为啥不行。。

  • 答案

卧槽,刚把问题写完我自己就想通原因了。但是打了这么多字,就写完吧。java代码里面的参数是拼接到url路径里的。所以可以调用。因此postman里面可以这样调用:

图片说明

这样也就通了。困扰我很久的问题,想通了。因此java代码里面,无论接口参数是键值对还是json数据,content-type设置成application/json就没错了。

  • 写回答

2条回答

  • devmiao 2018-12-23 15:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况