Spring MVC 与 JPA 数据绑定

2024-01-08

我的问题是让 Spring 将从表单获取的数据绑定到 JPA 实体。奇怪的是,如果我不查看 BindingResults,它就可以正常工作。 BindingResults 表示,当为字段毕业传入空字符串时,会出现绑定错误,但我知道它确实正确绑定了它们,因为当我不检查 Hibernate 时,会完美更新数据库。有没有办法不必编写逻辑来绕过错误触发的绑定错误?

    @Entity
    @Table(name="child")
    public class Child {

        @Id
        @Column(name="id")
        private Integer childId;

        @ManyToOne(fetch=FetchType.EAGER )
        @JoinColumn(name="house", referencedColumnName="house")
        private House house;

        @NotNull()
        @Past()
        @Column(name="birthday")
        private Date birthday;

        @Column(name="graduation_date")
        private Date graduationDay;

    }

我在属性编辑器中尝试了以下几行但无济于事

    SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy");
    registry.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));

这是控制器方法处理请求的方法签名

    @Controller
    @SessionAttributes(value="child")
    @RequestMapping(value="child")
    public class ChildModController {

    @RequestMapping(value="save-child.do", params="update", method = RequestMethod.POST)
    public @ResponseBody Map<String,?> updateChild(

        HttpServletRequest request,
        @Valid @ModelAttribute(value="child")Child child,
        BindingResult results)
    }

这是我从 BindingResult 类中得到的消息

    09:01:36.006 [http-thread-pool-28081(5)] INFO  simple - Found fieldError: graduationDay, 
    Failed to convert property value of type java.lang.String to required type java.util.Date for property graduationDay; 
    nested exception is org.springframework.core.convert.ConversionFailedException: 
    Failed to convert from type java.lang.String to type @javax.persistence.Column java.util.Date for value '; 
    nested exception is java.lang.IllegalArgumentException

Spring 自动绑定简单的对象类型,如 String 和 Number,但对于复杂的对象,如java.util.Date或者您自己定义的类型,您将需要使用所谓的PropertyEditors or Converters,两者都可以解决您的问题。

Spring已经有了预定义PropertyEditors and Converters like @NumberFormat http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/format/annotation/NumberFormat.html and @DateTimeFormat http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/format/annotation/DateTimeFormat.html

您可以像这样直接在您的字段中使用它们

public class Child {

  @DateTimeFormat(pattern="dd/MM/yyyy")
  private Date birthday;

  @DateTimeFormat(iso=ISO.DATE)
  private Date graduationDay;

  @NumberFormat(style = Style.CURRENCY)
  private Integer myNumber1;

  @NumberFormat(pattern = "###,###")
  private Double myNumber2;

}

Spring 还允许您定义自己的类型转换器,您必须将其与 Spring 结合使用ConversionService

例如,如果您有一个Color像这样的类

public class Color {
  private String colorString;

  public Color(String color){
     this.colorString = color;
  }
}

例如,您可以像这样定义颜色转换器

public class StringToColor implements Converter<String, Color> {
  public Color convert(String source) {
    if(source.equal("red") {
       return new Color("red");
    }

    if(source.equal("green") {
       return new Color("green");
    }

    if(source.equal("blue") {
       return new Color("blue");
    }

    // etc

    return null;
  }
}

要检查有关转换器的更多信息,请检查this http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/validation.html,还检查this https://stackoverflow.com/questions/12544479/spring-mvc-type-conversion-propertyeditor-or-converter知道之间的区别Converters and PropertyEditors

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC 与 JPA 数据绑定 的相关文章

  • 如何在gradle中执行jar文件?

    当我使用 ant 构建我的 android 项目时 我需要这样的任务
  • android OpenGl 如何绘制一个矩形

    我想用OpenGL画一个矩形 package jnidemo example com openglsquare import android content Context import android opengl GLSurfaceVi
  • 在总是抛出方法之后如何检测死代码?

    考虑以下代码 Test public void testDeadCode letsThrow System out println will never be reached private final void letsThrow thr
  • 如何从c调用Java函数

    我被这个问题困扰了 我需要从 c c 调用 Java 函数 在示例和教程中 我只看到一个java应用程序调用一个c方法 并在同一个方法中调用另一个java方法 但我想做的是从代码的任何部分调用java方法 这就是我所拥有的 static J
  • android listviews:页眉和页脚视图

    在我的 ListActivity 中 我需要页眉和页脚视图 位于列表的顶部和底部 分别用作列表上的上一页和下一页按钮 因为我只想一次仅显示 20 个项目 我通过执行以下操作来设置头视图和脚视图 getListView addHeaderVi
  • Java中如何存储profile?

    我仍在学习 Java 的诀窍 如果有一个明显的答案 我很抱歉 我有一个占用大量内存的程序 我想找到一种方法来减少其使用 但是在阅读了许多 SO 问题后 我认为在开始优化它之前我需要证明问题出在哪里 这就是我所做的 我在程序的开头添加了一个断
  • 如何按照最初给出的时区存储和显示日期?

    我有一台服务器正在从不同时区的客户端提供数据 数据源包含人物 他们的出生日期和其他事件日期 出于我们的目的 如果我们可以将日期存储为给我们的日期 那就很方便了 例如 如果客户位于加利福尼亚州 并且告诉我们该人的出生日期是 5 月 31 日
  • Java:getInstance 与静态

    目的是什么getInstance 在Java中 在我的研究过程中我一直在读getInstance 有助于实现单例设计模式 根据我的理解 这意味着整个程序中只有一个实例 但我不能只使用静态吗 这不是静态的全部意义吗 如果我只有静态方法和字段
  • 使用ThreadPoolExecutor,allowCoreThreadTimeOut和零核心线程有什么区别?

    阅读以下文档线程池执行器 https docs oracle com javase 7 docs api java util concurrent ThreadPoolExecutor html 我很困惑以下示例用法之间的区别 零个核心线程
  • 基本的 Swing 库? JGoodies,JFreeChart [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何模拟类路径上属性文件的存在?

    这肯定是一个常见问题 我有一个像这样的属性文件my settings properties由应用程序类读取 当我编写测试类时 它需要测试可能存在的不同场景my settings properties为了确保最大的代码覆盖率 例如空属性文件
  • 通过反思思考工厂设计模式

    我正在对工厂模式进行研发 我开发了下面的代码 现在我知道子类是 Dog 和 Cat 但是如果我想通过在 main 中传递类名来通过反射实现同样的事情 请告诉我该怎么做 爪哇 public abstract class Animal publ
  • 在抽象类上使用 Lombok @SuperBuilder 注释和 toBuilder ?

    我有以下课程 SuperBuilder toBuilder true public abstract class Parent SuperBuilder toBuilder true public class Child extends P
  • 使用三十、LocalDate 获取每月的第一天和最后一天

    我有一个 LocalDate 需要获取该月的第一天和最后一天 我怎么做 eg 13 2 2014我需要得到1 2 2014 and 28 2 2014 in 本地日期 https docs oracle com javase 8 docs
  • 如何使用 NetBeans 导入 Jackson Core JacksonFactory?

    请参阅固定导入声明的链接问题 我将在尝试 Netbeans 后更新这个问题 下面使用 Netbeans 一切应该建立 https github com NICKSAUNDERS sheets 然而 这个问题是针对 Netbeans 的 寻找
  • 在Java中解析包含multipart/form-data请求体的字符串

    问题陈述 我认为标题说明了一切 我正在寻找解析 a 的方法String包含 multipart form data HTTP 请求的正文部分 IE 字符串的内容看起来像这样 xyzseparator blah Content Disposi
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • Java - 类型转换问题

    long a long Math pow 2 32 a 4294967296 long a int long Math pow 2 32 a 0 long a int Math pow 2 32 a 2147483647 WTF 第一个表达
  • 使用 Vaadin 生成 HTML 速度缓慢

    我是一个有问题的开发人员 目前我们的项目 使用 Vaadin 即将结束 但是 我们在其中一个视图中显示简单数据时遇到了一些麻烦 Vaadin 完成生成后 需要显示超过 500 KB 的数据 以及超过 15K 的 DOM 元素 在完成之前需要
  • 整个程序可以是不可变的吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我熟悉不可变性并且可以设计不可变类 但我主要拥有学术知识 缺乏实践经验 请参考上面的链接图片 尚不允许嵌入 从下往上看 学生需要新地址

随机推荐

  • Smartgwt RestDataSource 与 SpringMVC 和跨客户端

    经过大量工作后 我有了一个现有的后端 Web 服务应用程序 该应用程序由 Sp ring RS Spring MVC Spring 控制器提供支持 这些控制器在 Spring 框架内使用 Jackson 将响应转换为 JSON 这是 WEB
  • 如何在Java中解码http POST数据?

    我正在使用 Netty 并且必须接受并解析 http POST 请求 据我所知 Netty 没有内置对 POST 的支持 只有 GET 的支持 这是一个相当低级的库 处理原始网络操作 使用 servlet 容器 开箱即用地完成所有这些工作
  • 如何将数组转换为数学计算表达式? [复制]

    这个问题在这里已经有答案了 我尝试编写一个计算数学表达式并将每个符号存储到一个数组中 例如 我想转换数组 let arr 10 2 1 3 对于以下表达式 let result 10 2 1 3 1 关于如何实现这一目标有什么建议吗 它不会
  • 如何使用 Gradle 访问 Java 项目中的资源?

    我有一个JavaFX https en wikipedia org wiki JavaFX我正在使用 Gradle 文件构建项目 并且我正在 IntelliJ 中编写所有内容 在其中 我使用javafx scene media Media
  • 更改嵌入到按钮的图像的颜色(Swift3)

    我能够更改图像的颜色UIButton从黑到白 代码如下 extension UIImage func maskWith color UIColor gt UIImage UIGraphicsBeginImageContextWithOpti
  • 函数返回未分配给变量

    如果调用 非 void 函数 但不将其返回值分配给变量怎么办 例如 getchar 我一直想知道这样的值会发生什么 我听过一些幽默的解释 比如 它消失了 等等 但我真的很想知道真相 有什么办法可以恢复这样的价值吗 谢谢 这实际上是编译器 C
  • 在 numpy 矩阵中一次打乱一列的有效方法

    我需要一一打乱 numpy 矩阵的所有列 这是我当前的代码 n p X shape val for i in range p Xt X copy np random shuffle Xt i print Xt 我每次都抄X到变量Xt 这看起
  • 我把GC.KeepAlive放在哪里?

    我需要在非托管代码中注册回调 但看起来 GC 一直在收集我的引用 所以我添加了GC KeepAlive callback pin 但没有效果 我不知道应该放在哪里GC KeepAlive 这是我将自己的回调注册到非托管事件的代码 它是从线程
  • 下拉菜单被切断

    我有一个下拉菜单 它似乎由于父 div 而被剪切 即如果我增加父 div 的高度 下拉菜单似乎会变得可见 请帮忙 下面是我的代码 MarkUp div class container div class menu rounded ul cl
  • 如何在 Ruby on Rails 中基于每个操作禁用日志记录?

    我有一个 Rails 应用程序 它的一个操作被频繁调用 在我开发时很不方便 因为它会产生大量我不关心的额外日志输出 我如何才能让 Rails 不记录这一操作的任何内容 控制器 操作 参数 完成时间等 我也想在 RAILS ENV 上对其进行
  • 将 json 结果转为动态

    对于初学者来说 我有一个非常复杂的问题 首先我从 json 得到这个结果 success true timeframe true start date 2018 01 01 end date 2018 01 05 source TRY qu
  • 我的 tomcat 正在运行,但无法连接到 http://localhost:8080

    Tomcat突然停止连接http 本地主机 8080 http localhost 8080今天 直到昨天为止它一直有效 我没有改变任何东西 Windows Windows 7 64 位 雄猫 7 0 59 任何人都可以帮忙吗 以下是我的
  • 一个组件中的多种材质分页在 Angular 中不起作用

    我尝试创建一个组件 其中包含两个数据表 每个数据表都有另一个数据源 由于我的原因 我的表格在组件加载后不可见 ngIf所以我无法使用ngAfterViewInit 相反 我正在使用用户的解决方案在Github上指出 https github
  • 是否可以从 Visual Studio 2010 创建 Office 2003 VSTO 加载项?

    我们现有适用于 Word 2003 和 Excel 2003 的 VS 2008 VSTO 加载项 目前我们无法升级 Office 版本 我们刚刚尝试将解决方案升级到 VS 2010 它可以正常转换和编译 但在构建和运行加载项时 我们收到一
  • Java 为什么 Map 的 Map (如:Map>)不可序列化

    我们正在使用HashMap in JDK 1 7我在代码审查期间遇到了一些问题声纳Qube 请考虑以下示例 public class SerializationTest implements Serializable private Map
  • DataTypeAttribute 验证在 MVC2 中工作吗?

    据我所知 System ComponentModel DataAnnotations DataTypeAttribute 不适用于 MVC v1 中的模型验证 例如 public class Model DataType EmailAddr
  • 已为布局页面“~/Views/Shared/_Layout.cshtml”定义但未呈现部分:“head”

    我创建了一个新的 MVC4 互联网应用程序 我正在关注 ASP NET MVC4 in Action 这本书 本章是Ajax 是MVC 中的ASP NET 索引的视图是这样的 section head Scripts AjaxDemo js
  • Javascript onclick 函数被立即调用(不是在单击时调用)? [复制]

    这个问题在这里已经有答案了 我正在尝试创建一个链接 它看起来和感觉起来都像 a 标记项 但运行一个函数而不是使用 href 当我尝试将 onclick 函数应用于链接时 它会立即调用该函数 无论该链接从未被单击过 此后任何单击该链接的尝试都
  • Maven 中出现“需要 webxml 属性”错误

    我收到以下错误 组装 WAR 时出错 需要 webxml 属性 如果在更新模式下执行 则需要预先存在的 WEB INF web xml 我有web xml在正确的地方projectname src main webapp WEB INF w
  • Spring MVC 与 JPA 数据绑定

    我的问题是让 Spring 将从表单获取的数据绑定到 JPA 实体 奇怪的是 如果我不查看 BindingResults 它就可以正常工作 BindingResults 表示 当为字段毕业传入空字符串时 会出现绑定错误 但我知道它确实正确绑