在Spring MVC中处理编辑对象的正确方法是什么?假设我有用户对象:
public class User {
private Integer id;
private String firstName;
private String lastName;
//Lets assume here are next 10 fields...
//getters and setters
}
现在在我的控制器中,我有GET和POST网址:user / edit / {id}
@RequestMapping(value = "/user/edit/{user_id}", method = RequestMethod.GET)
public String editUser(@PathVariable Long user_id, Model model) {
model.addAttribute("userForm", userService.getUserByID(user_id));
return "/panels/user/editUser";
}
@RequestMapping(value = "/user/edit/{user_id}", method = RequestMethod.POST)
public String editUser(@Valid @ModelAttribute("userForm") User userForm,
BindingResult result, @PathVariable String user_id, Model model) {
if(result.hasErrors()) {
User user = userService.getById(user_id);
user.updateFields(userForm);
}
userService.update(user);
}
现在的问题是,我真的需要用POST方法从数据库中获取用户,并以某种更新方法逐个更新每个字段吗?还是有更好的方法呢?
我正在考虑为用户使用@PathVariable并使用转换器从数据库中获取用户,然后以某种方式将POST方法中的参数自动注入该对象。像这样:
@RequestMapping(value = "/user/edit/{user}", method = RequestMethod.POST)
public String editUser(@Valid @PathVariable("user") User userForm,
BindingResult result, Model model)
但是当我尝试这样做时,BindingResults出现错误:
java.lang.IllegalStateException:在模型属性,@ RequestBody或@RequestPart参数之后,应立即声明一个Errors / BindingResult参数
有没有一种简单的方法可以创建控制器来处理对象编辑,或者我需要复制可以一次更改一个的字段?
顺便说一句,我不能使用SessionAttributes,因为它会导致多个选项卡出现问题。
参考方案
我相信您将“ userForm”作为模型属性发送。如果是这样,请尝试以下模式,
@RequestMapping(value = "/user/edit/{user_id}", method = RequestMethod.POST)
public String editUser(@PathVariable String user_id, @Valid @ModelAttribute("userForm") User userForm,
BindingResult result, Model model)
谢谢
在Spring Boot中如何在WebSSOProfileConsumerImpl中设置responseSkew属性值 - java我正在尝试将SAML OKTA集成到春季启动应用程序中。我需要在Spring Boot中使用以下bean设置:谁能帮我在Spring Boot的webSSOprofileConsumer bean中设置responseSkew属性。我只需要上面在基于注解的Spring Boot注入中提到的xml配置的等效Spring注入技术。我已经通过链接了:http://…
在Spring Kafka中,我需要在应用程序中添加@EnableKafka批注吗? - java我看到有人在他们的Spring Boot应用程序中添加@EnableKafka,我想知道为什么。我有一个工作的春季靴kafka生产者和使用者,并且没有使用@EnableKafka。那么,为什么人们需要显式添加它?谢谢。 java大神给出的解决方案 这是因为Spring Boot通过KafkaAutoConfiguration类(javadoc)为Kafka提…
在Spring Boot应用程序中加载不同的应用程序上下文 - java我试图在不同的应用程序上加载不同的上下文,让我解释一下:我有3个应用程序(DAOS-帮助程序-Web),它们都是SpringBoot应用程序,但Web是WebApp(具有ServletInitializer)事情是我用JUnit及其applicationContext测试了每个组件,每个组件都可以,但是当我部署Web Project(.war)时出现了此错误…
Spring Data Cassandra的事务管理 - java我正在使用Spring和Cassandra作为基础数据库。曾提到过弹簧伞项目“ spring data cassandra”。与休眠不同,在这里无法找到如何管理事务。如果您中的某些人已经合并,请共享要包含的事务管理器的详细信息。 参考方案 Cassandra不支持传统(ACID)的事务。在某些特殊情况下,可以通过一些构造来实现事务原子性,例如原子批处理(请参…
Spring Boot如何在POST之后返回响应 - java我想创建一个新客户并在创建客户后返回客户编号。客户编号必须是从50000开始的自动递增的唯一编号。到目前为止,我已经成功创建了一个客户,但是我不确定应该如何生成客户编号,将其保存到数据库中,并在触发POST时将其作为成功消息显示给用户。json下面是所需的响应;{ "customerNumber": "50002", …