Java 在响应对象中隐藏JSON字段

Java 在响应对象中隐藏JSON字段,java,json,rest,getjson,jsonresult,Java,Json,Rest,Getjson,Jsonresult,假设我使用JAVA使用基于REST的服务,我有一个JSON响应对象,类似于下图 <Response> "some text" <Response> <xyz_1> "some text" <xyz_1> <abc_action1> "some text" <abc_action> <abc_action2> "some text" <abc_action> <abc_acti

假设我使用JAVA使用基于REST的服务,我有一个JSON响应对象,类似于下图

<Response> "some text" <Response>
  <xyz_1> "some text" <xyz_1>
  <abc_action1>  "some text" <abc_action>
  <abc_action2>  "some text" <abc_action>
  <abc_action3>  "some text" <abc_action>
  <abc_action4>  "some text" <abc_action>
<Response> "some text" <Response>
“一些文本”
“一些文本”
“一些文本”
“一些文本”
“一些文本”
“一些文本”
“一些文本”
在当前的实现中,该响应类对应的Java类有5个实例变量{xyz_1、abc_action1、abc_action2、abc_action3、abc_action4} 使用getter和setter方法


因此,我所要做的就是依赖于传入REST调用的queryParameters,我想隐藏(而不是发出)响应对象中的一个标记。这是否可能,因为Java类定义了5个变量

如果您在REST实现中使用类似jersey的东西,那么您可以使用@JsonIgnore来完成该任务。如果您使用不同的提供程序,那么您至少可以检查源代码并自己执行。

如果您在REST实现中使用类似jersey的东西,那么您可以使用@JsonIgnore来执行该任务。如果您使用不同的提供程序,那么至少您可以检查源代码并自己执行。

一个解决方案是创建一个
响应到
类(DTO作为数据传输对象,请参阅此以获得非常简短的介绍),并让您的(*)服务返回该类的对象,而不是
响应
对象。在您的服务中,您将只初始化您的
响应对象中适合当前查询参数的那些字段

或者,您可以返回一个新的、非托管的
响应
对象,其中,您将仅初始化那些适合于当前查询参数的字段。在这里,您应该小心,不要对托管响应对象进行更改,因为这些更改将保留在数据库中


(*)“你”和“你的”在这里指的是匿名的“你”,而不是OP,他们现在一定已经以某种方式弄明白了这一点

一种解决方案是创建一个
ResponseDTO
类(数据传输对象中的DTO,请参阅此以获得非常简短的介绍),并让您的(*)服务返回该类对象,而不是
Response
对象。在您的服务中,您将只初始化您的
响应对象中适合当前查询参数的那些字段

或者,您可以返回一个新的、非托管的
响应
对象,其中,您将仅初始化那些适合于当前查询参数的字段。在这里,您应该小心,不要对托管响应对象进行更改,因为这些更改将保留在数据库中


(*)“你”和“你的”在这里指的是匿名的“你”,而不是OP,他们现在一定已经以某种方式弄明白了这一点

queryParameters
应用的一些参数以及您想要隐藏的这些参数。否,根据REST调用的queryParameters中的值,我想要隐藏响应对象中的标记(字段)。这与JSON完全不同。答案取决于您的JSON序列化程序。@JBNizet能否请您详细说明这一点如何取决于我的序列化程序?如果我知道您的序列化程序是什么,我可以阅读它的文档并找到答案(您也可以)。从
queryParameters
应用的一些参数以及您想要隐藏的这些参数。否,根据REST调用的queryParameters中的值,我想要隐藏响应对象中的标记(字段)。这与JSON完全不同。答案取决于您的JSON序列化程序。@JBNizet能否请您详细说明如何根据我的序列化程序执行此操作?如果我知道您的序列化程序是什么,我可以阅读其文档并找到答案(您也可以)。