Java for Web学习笔记(六二):Controller替代Servlet(4)方法返回值

这次只是预热,将在下一次笔记中更具体的讲述。

返回值和HTTP响应有关。void表示方法手动处理了响应,Spring不需要再进行其他处理。然而可以回复其他类型,有时还带有annotation,告知Spring如何响应。这些都在以后学习,先粗略看看。

Model类型
返回Map<String, Object>、ModelMap或者Model
Spring通过配置的org.springframework.web.servlet.RequestToViewNameTranslator确定使用哪个view
View类型
返回一个指定的view来渲染响应,Spring提供了数十个View,我们也可以自定义。Controller可以返回String指出View的名字
方法可以返回ModelAndView,可以返回View和和model类型,或者view名字和model类型。
Response Body Entities
返回 HttpEntity<?>或org.springframework.http.ResponseEntity<?>(是HttpEntity的继承),Spring将根据协商的Content-Type,使用适当的转换器来处理响应。例子如下
@RequestMapping(value="user/{userId}", method=RequestMethod.GET)
public ResponseEntity<User> getUser(@PathVariable("userId") long userId){
    User user = this.userService.getUser(id);
    return new ResponseEntity<User>(user, HttpStatus.OK);
}

//上面等同与下面的写法
@RequestMapping(value="user/{userId}", method=RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public User getUser(@PathVariable("userId") long userId){
    return this.userService.getUser(id);
}
之前我们使用了@ResponseBody,返回String表示直接作为响应的body,而不使用view。
任意类型
对于其他类型,Spring将视为Model的属性。
//第一个例子,model的属性名字为userAccount(采用camelCase方式,也就是第一个单词首字母小写,其余的大写)
@RequestMapping("user/{userId}")
public UserAccount viewUser(@PathVariable("userId") long userId)
{ ... }

//第二个例子,定义了@ModelAttribute,也就是指定model的属性名字为user
@RequestMapping("user/{userId}")
@ModelAttribute("user")
public UserAccount viewUser(@PathVariable("userId") long userId)
{ ... }
异步类型
返回java.util.concurrent.Callable<?>或者org.springframework.web.context.request.async.DeferredResult<?>将采用异步处理,在其他线程处理Callable或者DeferredResult。
仍可以使用@ResponseBody, @ResponseStatus, @ModelAttribute。
相关链接: 我的Professional Java for Web Applications相关文章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值