spring data jpa 의 jsonfilter
이번엔 spring data jpa의 json 으로 보내기위한 방법을 한개더 포스팅 하겠다.
jsonfilter 라는 어노테이션을 사용하여 해보자
소스는 dto와 비슷하다.
다른 부분만 올려서 설명하겠다.
jsonfilter는 jackson 라이브러리의 어노테이션이다.
일단 entity에 jsonfilter를 추가하자
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonFilter("accountFilter")
public class Account {
@Id
@GeneratedValue
@Column(name = "account_id")
private Long id;
@NotNull
private String name;
@OneToMany(mappedBy = "account")
private List<Ordered> ordered;
}
기존 소스와 동일하지만 JsonFilter 어노테이션만 추가 하였다.
작업 할 것이 한개더 있다.
@RequestMapping(value = "/accounts", method = RequestMethod.GET, headers = "Accept=application/json")
public String getAccounts() throws JsonProcessingException {
List<Account> accounts = accountRepository.findAll();
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("accountFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));
String accountsStr = mapper.setFilterProvider(filters).writeValueAsString(accounts);
return accountsStr;
}
@RequestMapping(value = "/account/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public String getAccount(@PathVariable Long id) throws IOException {
Account account = accountRepository.findOne(id);
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("accountFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));
String accountStr = mapper.setFilterProvider(filters).writeValueAsString(account);
return accountStr;
}
ObjectMapper에 filter를 적용해야 된다. entity에 추가 했던 filter 값을 넣으면 된다.
SimpleBeanPropertyFilter.filterOutAllExcept 메소드는 추가할 property명만 적어주면 된다.
SimpleBeanPropertyFilter.serializeAllExcept 메소드는 제외 시킬 property명을 적어주면 된다.
어떤것이 좋을까 고민중
바로 다음에 @JsonView를 사용해서 해보자!