【问题标题】:Spring REST representation classSpring REST 表示类
【发布时间】:2015-05-01 18:15:43
【问题描述】:

我正在阅读关于buldingconsuming Spring Rest web 服务的两篇介绍性文章。

奇怪的是——他们在客户端应用程序(第二个链接参考)中创建了一个 Greeting 表示类,用于存储 GET 响应(服务器端的 greeting 方法返回一个 Greeting 对象)。但是服务器端和客户端的Greeting 类是不同的类——嗯,它们是两个不同的类,具有相同的名称、相同的字段名称和类型(客户端没有构造函数)。

这是否意味着在构建客户端应用程序时我必须类似地从 stratch 重写类?为了做到这一点,我需要关于服务器应用程序传递的 JSON 打包对象的字段类型是什么的规范。服务器将 ABCClass 类的对象序列化为 JSON 并将其发送给客户端。即使某个名为“abc”的字段的值为 10,它也不会使其成为整数。下次它可能包含一个字符串。

我的问题是 - 为了创建客户端应用程序,我需要从服务器应用程序的开发人员那里获得多少信息?一般是怎么做的?

【问题讨论】:

  • Greeting 可能只是客户端和服务器之间通信的一个对象,所以你有没有构造函数都没关系,除非你的序列化库需要一个
  • 我问了一些别的事情。在服务器端,有一个 greeting 方法返回一个 Greeting 类型的对象(它有字段 id 和 content)。然后将其转换为 JSON 并通过 http 传递给客户端。客户端接收到 http 并使用 getforobject 方法创建对象。请注意,服务器和客户端代码中的 Greeting 类是不一样的!我可以在客户的应用程序中将其名称更改为任何名称,它仍然可以工作。我在问客户端的 Greeting 类中的字段名称和类型是否必须与服务器的 Greeting 类中的相同才能正常工作?
  • 如果是这样,我需要服务器的“问候”类字段的确切类型和名称来创建工作客户端的表示类。我想我的问题已经说得很清楚了。

标签: java json spring rest


【解决方案1】:

这完全取决于您的反序列化器和您的需求。以 Jackson 为例,您可以使用 mixins (wiki ref) 和自定义反序列化器 (wiki ref) 来使用所需的字段名称和结构构建对象。 它只是具有相同字段名称和结构的最简单方法,但不是唯一的方法。 当然,无论如何,您应该知道服务器回复结构以反序列化它

【讨论】:

  • 除了来自服务器的 JSON 回复之外,我还需要什么吗?它仅包含字段名称和值...
  • 我的意思是我需要来自服务器应用程序开发人员的类型信息。例如,即使 JSON 中名为 'abc' 的某些字段的值为 10,它也不会自动将 'abc' 设为整数。下次它可能包含一个字符串。
  • 是的,它可能会,服务器应该通过元数据自动为客户端提供约定,就像 ALPS 所做的那样,或者至少手动提供文档
猜你喜欢
  • 2017-03-10
  • 2017-07-12
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多