我正在使用Spring Roo,使用Spring MVC和JPA来持久化MySQL数据库.我对Spring MVC和Java非常陌生,但是我一直在使用CakePHP和Rails.
User除了密码之外,我还有一个包含个人详细信息的实体.这样的事情(在其他.aj文件中排除了很多Roo生成的功能):
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;
@Column(name = "PASSWORD", length = 32)
private String password;
@Column(name = "FIRST_NAME", length = 25)
private String firstName;
@Column(name = "LAST_NAME", length = 25)
private String lastName;
@Column(name = "ADDRESS", length = 255)
private String address;
// The appropriate getters and setters
...
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的User控制器中有一个编辑动作,我根据Roo自动生成的脚手架创建了以下约定:
@RequestMapping(value="/edit", method = RequestMethod.GET)
public String editForm(Model uiModel) {
String username = (String) …Run Code Online (Sandbox Code Playgroud) 有一个Java spring MVC web应用程序,并正在发出jquery ajax post请求.我的控制器设置为接收和发送json数据.一切正常,JSON字符串格式良好,Controller可以创建并填充Command对象,并使用JSON请求数据的内容填充它.但是,我正在更新Contact对象的数据,而我的JSP表单元素仅包含数据库更新所需的所有数据的子集.在我对具有表单的JSP页面的初始GET请求中,我从数据库中检索所有必需的数据,填充Contact Command对象,然后将该命令对象绑定到Model.
如果我正在进行正常的POST提交表单提交,我相信只是将我的命令对象声明为@SessionAttribute,并在我的onSubmit()POST方法中使用@ModelAttribute引用该Command对象就足够了.Spring将从我的会话中检索已填充的命令对象,然后绑定(覆盖)由于POST请求而更改的那些值.然后,可以将此更新的命令对象用作DB更新的参数.
但是,我正在使用Spring 3并利用@RequestBody参数类型.我无法让Spring给我会话对象并自动绑定请求中的新值.它或者只提供旧的会话命令对象(不应用更改)或仅提供POST请求中的值的新命令对象.
这是一个小代码 - 不起作用:
@SessionAttributes("contactCommand")
@Controller
public class ContactController {
@RequestMapping(value = "/editContact", method=RequestMethod.GET)
public String init(ModelMap model, Locale locale, HttpServletRequest request, HttpServletResponse response) throws GeneralException {
final ContactCommand cmd = new ContactCommand();
// populate with data from DB etc
model.addAttribute("contactCommand", cmd);
// etc
}
@RequestMapping(value="/editContact",method=RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Map<String, ? extends Object> editContactInfo(@RequestBody @ModelAttribute("contactCommand") ContactCommand cmd, HttpServletRequest request, HttpServletResponse response) throws GeneralException {
// do …Run Code Online (Sandbox Code Playgroud) 我使用 SpringBoot Web 和 Morphia DAO(以使用 MongoDB)创建一个 REST Web 服务。
正如我在 MySQL 上使用 Hibernate 时所做的那样,我想使用通用实体、存储库和端点,这样我只需设置实体、继承存储库和服务,并通过 REST 调用使用生成的 CRUD。
快完成了,但我在使用 Morphia 进行实体的通用更新时遇到了问题。到目前为止,我所看到的所有内容都涉及手动设置带有必须更改的字段的请求;但在 Hibernate 方式中,我们只需设置 Id 字段,调用 persist(),它就会自动知道发生了什么变化并在数据库中应用更改。
这是一些代码。
基础实体.java
package org.beep.server.entity;
import org.mongodb.morphia.annotations.Entity;
@Entity
abstract public class BaseEntity {
public static class JsonViewContext {
public interface Summary {}
public interface Detailed extends Summary{}
}
protected String id;
public void setId(String id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
User.java(我的最终实体之一)
package org.beep.server.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.*;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty; …Run Code Online (Sandbox Code Playgroud) java ×3
ajax ×1
controller ×1
hibernate ×1
jpa ×1
json ×1
morphia ×1
rest ×1
spring ×1
spring-boot ×1
spring-mvc ×1
spring-roo ×1