【问题标题】:Passing model from controller to view将模型从控制器传递到视图
【发布时间】:2011-08-15 18:35:16
【问题描述】:

我有一个 html/jsp 表单,我正在序列化(使用 jquery)并通过 ajax 传递给 spring 控制器。其实就是绑定了一个属性的spring-mvc形式。

我的第一个问题是:当我通过 ajax 从表单传递数据时,此绑定不相关?

其次,它绑定的对象是一个相当复杂的休眠实体对象,我在将 json 转换为对象的实例时遇到问题 - 它具有对其他对象等的引用等,实际上我不确定是什么确切的问题是错误消息不是特别清楚:Content type 'application/json' not supported。

是否应该使用 DTO/值对象而不是实体对象,然后基于 DTO 创建实体对象?

或者,我是否应该追踪导致 json 转换失败的实体对象/表单中的问题字段,这将是耗时且乏味的,但在我看来最终结果更整洁。

欢迎提出建议。

编辑: 当简单的表单/对象只有几个字符串属性和相关的 getter/setter 时,它们的转换工作正常。 The controller and javascript code.

【问题讨论】:

  • “实际上我不确定确切的问题是什么,因为错误消息特别清楚” 这是自相矛盾的。如果错误消息很清楚,为什么您不知道确切的问题是什么?顺便说一句,你的标题真的应该改进一下。
  • @BalusC 是拼写错误。我很喜欢这个标题。
  • 这个错误基本上是在告诉你的Spring控制器不支持application/json格式的请求体。也许它只理解application/x-www-form-urlencoded 主体,或者您需要以某种方式告诉您的Spring 控制器该请求的格式为application/json?反正我不做Spring,所以无法详细回答。
  • @BalusC 并非如此 - 因为 json 编码工作正常。它将 json 转换为对象失败,并返回一般错误消息。
  • 请注意 JSON 编码发生在 JavaScript 代码中,而不是在 Spring 代码中。

标签: java json spring-mvc


【解决方案1】:

是的,使用 DTO。除了避免您遇到的各种 ORM 问题之外,它还可以让您更轻松地定义您所做的以及不希望您的用户能够更改的内容。例如,如果有人向您发送了一个被黑客入侵的 JSON 对象,该对象定义了您不希望他们能够修改的属性或关系,该怎么办?您准备好对该模型对象上的每个属性执行(和维护)检查以避免此类黑客攻击吗?

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 2013-07-08
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多