前言
今天用 postman 测试接口发现出现了重复的地址名称,比如原本路径应该是 /wxMpService/details 的,变成了这样 /wxMpService/wxMpService/details,多了个 wxMpService,我想不通是什么问题导致,因为后台有返回了数据,但是到前端就报 404 的问题。
后来经过测试发现了问题,就是如果我定义 @Controller 注解就会发生这个问题,如果我定义 @RestController 就会访问正常,为什么会出现这种情况呢。
原因是由于 @Controller 忘记写返回状态码 @Responsebody ,Spring 对返回值映射时找不到对应的视图,所以返回404。
所以,当使用 @Controller 要在每个方法上面加上 @ResponseBody,负责将数据以 JSON 形式返回出去,也可以直接在类的顶部将 @Controller 换成 @RestController,@RestController 注解,相当于@Controller 和 @ResponseBody 两个注解的结合,返回 JSON 数据不需要在方法前面加@ResponseBody 注解了,但使用 @RestController 这个注解,就不能返回 html 和 jsp 页面,因为视图解析器无法解析 jsp、html 页面
这里我查询了一下 @ResponseBody 注解的说明,发现它的作用是将代码 return 的值作为 HTTP 请求的内容返回客户端,也就是我们可以在前端直接当成 JSON 来接受后端发送的数据。所以是因为我之前没写这个注解,所以,HTTP 请求的内容默认将是一个页面,而有了这个注解呢,就可以直接把函数返回值作为 HTTP 请求的内容。