问题描述
问题是这样的,有一个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中,使用form-data方式是可以调通接口的。
- 问题重申
因此我就想问下,为啥java代码里面创建的 application/json 类型的请求为啥可以而postman中的 application/json类型请求为啥不行。。
- 答案
卧槽,刚把问题写完我自己就想通原因了。但是打了这么多字,就写完吧。java代码里面的参数是拼接到url路径里的。所以可以调用。因此postman里面可以这样调用:
这样也就通了。困扰我很久的问题,想通了。因此java代码里面,无论接口参数是键值对还是json数据,content-type设置成application/json就没错了。