spring data jpa 의 jsonview

바로 쓴다.ㅎㅎㅎ 왜냐면 쉬워서 바로 했다.
아무튼 이번엔 @jsonView를 사용해보자
이것도 간단하지만 어노테이션을 많이 추가 해야된다.
그때 그때 맞게 잘 쓰면 될거 같다.

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {

    @Id
    @GeneratedValue
    @Column(name = "account_id")
    @JsonView(View.Accounts.class)
    private Long id;

    @NotNull
    @JsonView(View.Accounts.class)
    private String name;


    @OneToMany(mappedBy = "account")
    private List<Ordered> ordered;
}

class View {
    interface Accounts {}
}

뷰에 뿌려줄 데이타에 @JsonView 어노테이션을 붙이면 된다. 쉽다.
이것도 마찬가지로 한가지 더 해야 될 것이 있다.

    @RequestMapping(value = "/accounts", method = RequestMethod.GET, headers = "Accept=application/json")
    @JsonView(View.Accounts.class)
    public List<Account> getAccounts() throws JsonProcessingException {
        List<Account> accounts = accountRepository.findAll();
        return accounts;
    }

위와 같이 controller 메소드에도 똑같이 넣어주자 그럼 끝.
이거 역시 매우 간단하다.

이번엔 다중으로 해보자 어떤곳은 id만 어떤곳은 id와 name 둘다.

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {

    @Id
    @GeneratedValue
    @Column(name = "account_id")
    @JsonView({
            View.Accounts.class,
            View.Account.class
    })
    private Long id;

    @NotNull
    @JsonView(View.Accounts.class)
    private String name;


    @OneToMany(mappedBy = "account")
    private List<Ordered> ordered;
}

class View {
    interface Accounts {}
    interface Account {}
}

위와 같이 배열 형태로 넣으면 된다.

    @RequestMapping(value = "/account/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
    @JsonView(View.Account.class)
    public Account getAccount(@PathVariable Long id) throws IOException {
        Account account = accountRepository.findOne(id);
        return account;
    }

그런다음 account에 지정하여 보자.
그러면 id만 json 으로 나올 것이다.
이것으로 jpa의 json 순환할 경우에 대해서 알아 봤다.