这里要注意的是,controller和restcontroller的区别
restcontroller=controller+responsebody
这样就导致再controller文件中,如果一个请求只使用了controller而没有使用responsebody,那么就会认为这个请求返回的是一个访问资源的请求而不是一个字符串。
示例:
controller01:
@RequestMapping
@Controller
public class Text01Controller {
@GetMapping("/hi")
public String hello(){
return "hello";
}
}
controller02:
@RestController
@RequestMapping
public class TestController {
@GetMapping("/hello")
public String hi(){
return "hi";
}
}
这里我运行controller01,浏览器访问:localhost:8080/hi,会返回controller02的“hi”,而不是controller01的"hello"。
因为这里controller01我只使用@controller,而没有@Responsebody,就会导致return的“hello”会被当作一个访问资源的请求路径=>localhost:/8080/hello。这是controller02正好对应这个路径,而controller02使用的是@RestController包含了Responsebody,就会返回字符串"hi"。
如果在配置文件中你配置了视图解析器,那么在controller中找不到localhost:/8080/hello时就会去静态资源路径中寻找对应的文件。
这里如果localhost:/8080/hello在项目controller中和静态资源文件长都没有与之对应的路径就会返回404错误。
这时再controller01中加上@REsponsebody即可正常返回“hello”。