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

在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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog