從Spring MVC 4.0的多了@RestController
,與傳統@Controller
的差別其實只是@RestController
等於@Controller
搭配@ResponseBody
。
在撰寫RESTful API時,因為通常都是回傳json或xml,所以回傳無須交由View Resolver處理來返回頁面,所以會在Controller的API方法前加上@Responsebody
來達成,例如:
@Controller
@RequestMapping(value="/api/user")
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value="/all", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public List<User> getUserJson(Model model){
return userService.getAllUser();
}
}
而在4.0後可改用@RestController
,則該Controller類別中的方法回傳值都將預設為@ResponseBody
,所以原本方法前的@ResponseBody
就可以拿掉了。例如:
@RestController
@RequestMapping(value="/api/user")
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value="/all", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<User> getUserJson(Model model){
return userService.getAllUser();
}
}
另外Spring MVC 4.3還多了@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
,@PatchMapping
等對應RESTful API的HTTP method:GET,POST,PUT,DELETE,PATCH等,所以搭配以上就可以省略method的宣告了。
@RestController
@RequestMapping(value="/api/user")
public class UserController {
@Autowired
UserService userService;
@GetMapping(value="/all", produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<User> getUserJson(Model model){
return userService.getAllUser();
}
}
而@RequestMapping
中的produces
屬性則是用來設定返回client端的Response內容格式,例如這邊設為MediaType.APPLICATION_JSON_UTF8_VALUE
(等於"application/json;charset=UTF-8"
),此設定實際會反映到Response Headers的Content-Type。
沒有留言:
張貼留言