Выбранные Json поля игнорируются - PullRequest
1 голос
/ 25 февраля 2020

когда я запрашивал из таблицы отношение «один к одному», мне нужно было вернуть только одно поле. Я использовал JsonIgnore, но он игнорирует все поля.

пример:

@Entity
 public class Application {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank(message = "Name cannot be blank")
    String name;

    @NotBlank(message = "Email cannot be blank")
    @Email(message = "Email should be valid")
    String email;

    @NotBlank(message = "Phone cannot be blank")
    String phone;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "job_id", nullable = false)
    @JsonIgnore
    private Job job;

}

, но мне нужны аннотации вроде этого = JsonIgnoreExcept(Job.Title)

как я могу это сделать

1 Ответ

0 голосов
/ 25 февраля 2020

Мне нужны аннотации, подобные этой = JsonIgnoreExcept (Job.Title)

Вы не можете. Вам нужно аннотировать каждое поле в задании, которое вам не нужно, что даст вам

{...
   job: {"title" : "someTitle"}
...}

В качестве альтернативы вы можете использовать проекцию Spring Data

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

где можно было бы получить:

{...
   "job": "someTitle"
...}

@Projection
public interface ApplicationSummary{
    //all other fields you want

    @Value("#{target.job.title}")
    public String getJob();
}

Недостатком вышеупомянутого является необходимость указать все необходимые поля в интерфейсе проекции.

Лучшей альтернативой для 2-го класса, возможно, является использование преобразователя Джексона.

@Entity
public class Application {

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "job_id", nullable = false)
    @JsonDeserializer(converter = CustomJobConverter.class)
    private Job job;
}

с преобразователем:

public class CustomerJobConveter implements StdConverter<Job, String>{

    public String convert(Job job){
        return job.getTitle();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...