Скрыть поле JSON в объекте ответа

Допустим, я использую службы на основе REST с использованием JAVA, и у меня есть объект ответа 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} с методами получения и установки.

Итак, все, что я хочу сделать, это зависеть от параметров запроса входящего вызова REST, я хочу скрыть (не испускать) один из тегов в объекте ответа. Возможно ли это, поскольку в классе Java определены 5 переменных?


person bozo user    schedule 31.10.2013    source источник
comment
Некоторые параметры применяются из queryParameters, и эти параметры вы хотите скрыть.   -  person    schedule 31.10.2013
comment
Не зависимо от значений в queryParameters вызова REST. Я хочу скрыть теги (поля) в объекте ответа.   -  person bozo user    schedule 31.10.2013
comment
Это совсем не похоже на JSON. И ответ зависит от вашего сериализатора JSON.   -  person JB Nizet    schedule 31.10.2013
comment
@JBNizet, не могли бы вы рассказать, как это возможно в зависимости от моего сериализатора?   -  person bozo user    schedule 31.10.2013
comment
Если бы я знал, что такое ваш сериализатор, я мог бы прочитать его документацию и узнать (вы, вероятно, тоже могли бы).   -  person JB Nizet    schedule 31.10.2013


Ответы (2)


Если вы используете что-то вроде трикотажа для реализации REST, вы можете использовать @JsonIgnore для выполнения этой задачи. Если вы используете другого поставщика, то, по крайней мере, вы можете проверить исходный код и сделать это самостоятельно.

person Karthik    schedule 31.10.2013

Одним из решений может быть создание класса ResponseDTO (DTO, как в объекте передачи данных, см. эту статью для очень краткого введения) и ваша (*) служба возвращает объекты этого класса вместо объектов Response. В вашем сервисе вы будете инициализировать только те поля вашего объекта ResponseDTO, которые соответствуют текущим параметрам запроса.

Или вы можете вернуть новый неуправляемый объект Response, где, опять же, вы будете инициализировать только те поля, которые соответствуют текущим параметрам запроса. Здесь следует соблюдать осторожность и не вносить изменения в управляемый объект Response, поскольку эти изменения будут сохраняться в базе данных.

(*) «вы» и «ваш» здесь относятся к анонимному «вы», а не к ОП, который к настоящему времени, должно быть, уже понял это, так или иначе. :)

person zerzevul    schedule 07.12.2018