【死磕springboot2.0】@restcontroller與 @controller的 區別;
阿新 • • 發佈:2018-11-17
@restcontroller
*原始碼如下:其包含@Controller 、@ResponseBody *
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
@controller 原始碼如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
區別:
@restcontroller 返回的為 json格式的資料;
@controller 返回的是字串;使用 @controller要在前端頁面展示資料需要配合html、jsp等檢視渲染到前端, 如下controller層使用@controller註釋方式;
/**
* @auther SyntacticSugar
* @data 2018/11/9 0009下午 10:50
*/
@Controller
@RequestMapping(method = RequestMethod.GET, value = "/")
public String getuser(Model model) throws IOException {
model.addAttribute("name",bob);
model.addAttribute("sex",boy);
return "user";//user是模板名
}
返回的是user字串;
資料需要配合jsp、或者html ,通過檢視解析器 在前端展示;
只有在user.jsp 頁面 進行展示,否則僅僅是 user字串;但是,若是使用 @RestController 返回的是 user物件的 json 格式;如下圖所示:
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div>
<p>"${name}"</p>
<p>"${sex}"</p>
</div>
</body>
</html>
問題描述:
springboot 中在controller 層,新增@controller 註解, 請求無效; 跟換@RestController 註解,再次訪問可以了,頁面有顯示 json格式的資料;
controller 層如下:
/**
* @auther SyntacticSugar
* @data 2018/11/10 0010上午 11:22
*/
// @RequestMapping("user") 對外開放一個 user
//@Controller 和 @RestController
@RestController
@RequestMapping("user")
public class UserController {
//
@Autowired
private UserService userservice;
//@Bean bug 一次 ,不需要@Bean注入
// @getmapping 作用於某一個方法上
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id) {
return this.userservice.queryById(id);
}
}
@PathVariable 註釋,是從網址欄中獲取資料,即從URL中獲取資料;
上圖中的 URL 為 localhost/user/{id} ;使用該註解獲取到 Long id 的值作為引數傳遞;
檢視下 @PathVariable的原始碼:
*就是給 path繫結 變數的; *
springMVC中獲取瀏覽器的引數的註釋有 3個:
@requestparm, @requestbody和@pathvariable ,只有@pathvariable是獲取path的引數;@requestparm, @requestbody是由瀏覽器post提交引數;