在我的MVC模式的经典理解控制器不必知道视图的任何实现细节。 我想有它获取由事件(已触发控制器@RequestMapping
)并返回一个模型。 它是由视图如何呈现的模型。
形而下的用例是将商品放入购物车。 我有两个观点,一个简单的HTML视图和更丰富的Ajax的视图。 在我的梦中情景两种观点作出相同的URI请求,打在我的控制器的唯一方法:
@Controller
public class ShoppingCartController {
@RequestMapping("/add")
public String addItem(@RequestParam String itemId, Model model) {
// …
model.add(shoppingCart);
return "cart";
}
}
我的观点阿贾克斯发送到/添加请求?的itemId = ABC并且会得到最好的JSON模式。 我的HTML视图发送到相同的请求,并呈现模型转换成JSP。
我目前的做法是实现在其中要求所述控制器的第二方法addItem()
并返回JSON:
@RequestMapping(value="/add", headers="x-requested-with=XMLHttpRequest")
public @ResponseBody ShoppingCart addItemByAjax(@RequestParam String itemId, Model model) {
addItem(itemId, model);
return model.asMap().get("shoppingCart");
}
我真的不喜欢的装饰,以期依赖型适配器每个控制器的这一想法。 是否有服务与模型的选择恰当的呈现视图更通用的方法? 我想只有一个在我的控制器方法,将模型的任何视图。 当然,必须存在某处栈决定服务模型,JSON,如果某些条件为真处理程序上(比如说X-要求,与XMLHttpRequest的=)。