【问题标题】:Dynamic JSON Object using responce entity - Spring使用响应实体的动态 JSON 对象 - Spring
【发布时间】:2015-09-10 12:06:46
【问题描述】:

我正在使用 Spring 的 return ResponseEntity 来返回 HTTP 响应。

在实体中传递 POJO 或 MAP 时,它会将其转换为 JSON 对象。喜欢

  return new ResponseEntity<Object>(result, HttpStatus.OK);

结果可能是 POJO 类。 (getter 和 setter)

我正在使用

 <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.GsonHttpMessageConverter ">
</bean>

现在我想要的是,我将获得请求中的响应字段列表。我只想用这些字段来响应请求。

例如,如果我收到作为名称、id 的响应字段。那么对象必须只包含这两个。

 {
 "name":"test",
 "id":15
 }

我无法使用@jsonignore 或@explore 注释。 B'Coz 我希望使用编码动态完成 JSON。

可以通过覆盖 GSON 转换器方法或使用 AOP。

有没有办法配置jackson的适配器,根据字段创建对象。

【问题讨论】:

  • 您的意思是您要发送的响应是一个对象,其中包含您在请求中收到的正确值?请求值的数量是固定的还是动态的?
  • 完全正确。请求中的所有字段需要作为对象发送(POJO 已经有这些字段。但除此之外还有很多。我们需要排除)。它是动态的。我们不知道会发生什么。
  • 你需要使用Gson还是可以切换到Jackson?
  • 你没问题。也可以使用杰克逊。杰克逊有什么办法吗?实际上,首先我只使用杰克逊。仅为此,我转向了 GSON。
  • POJO 类是动态创建的吗?或者您只想忽略空值?

标签: java json spring spring-mvc jackson


【解决方案1】:

如果您可以切换到 jackson,您可能可以使用我为此目的编写的这个小扩展:

https://github.com/Antibrumm/jackson-antpathfilter

【讨论】:

  • 谢谢马丁。根据您在 github 中的示例,我必须在每个方法中添加 objectmapper,该方法在转换后起作用。无论如何,我在转换之前告诉杰克逊。
  • 我确实创建了一个 spring bean,它使用辅助方法封装了必要的代码。 bean.write(obj, "filters",...)。我还没有尝试将它与 responsebody 合并。我的控制器直接返回一个字符串。
  • mixin 配置只能完成一次,因为它适用于 Object。以spring bean的@PostConstruct为例。
  • 好的。对象映射器怎么样。我们可以配置它来实现这一点。
  • 我想我会在 github 自述文件中添加一个示例。给我一些时间;)
猜你喜欢
  • 2015-04-03
  • 2022-08-20
  • 2017-06-12
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2012-12-31
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多