关于stackoverflow的第一篇文章......我开始使用SpringMVC,我试图找出将我的实体链接到尽可能无状态的Web视图的最佳方法。
我发现的一种方法是在一个方法上使用@ModelAttribute,该方法在参数中(从请求中)接收实体 ID,该实体 ID 从服务/持久层中找到它,并将其返回,以便将其插入到当前请求。
此外,Spring MVC 绑定任何与我的实体字段匹配的传入参数并自动更新其值(通过 WebDataBinder)。
我的问题是关于最后一种行为。我发现当客户发布一些数据时更新我的实体很有用。但我想在一个简单的 GET 请求(我认为它是只读的)上避免它。当前行为将允许通过在此类请求的查询中添加参数来更新实体,这可能是一个安全问题。
我知道 dataBinder.setAllowedFields() 和其他东西,但我更喜欢一种方法来禁用任何类型的字段映射任何 GET 请求。有什么办法吗?
谢谢!
编辑:我添加了一个示例原型,以使其更清楚我在寻找什么......
@ModelAttribute Entity retrieveEntity(@RequestParam(required=true) Long id) {
// This is called before the request handler and before parameters are mapped to the entity
return entityRepository.get(id);
}
@RequestMapping(value="/modify", method=RequestMethod.POST)
public ModelAndView handleModifyRequest(@ModelAttribute Entity entity) {
// Here, I want my entity to reflect the parameters passed in the posted form (this works)
....
}
@RequestMapping(value="/read", method=RequestMethod.GET)
public ModelAndView handleReadRequest(@ModelAttribute Entity entity) {
// Here, I DON'T want my entity to reflect the parameters passed in the URL (which is what happens...)
....
}