ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • spring data jpa 의 jsonfilter
    카테고리 없음 2023. 4. 19. 09:55

    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를 사용해서 해보자!

    댓글

Designed by Tistory.