'jsonview 제작중'에 해당되는 글 1건

  1. 2009.10.27 [봄싹] SpringsproutMappingJacksonJsonView 대충 만들어보기. - 1 편 - (2)
봄싹2009.10.27 13:21
스프링의 훌륭한 바인딩 기술로 인해서 .. 삽질좀 했다...
ModelMap 이나 Model 객체에 .. 컨트럴에서 사용하는 command 객체나 SessionAttributeStore에 들어 있는 객체를
자동으로 담아주기 때문이다..

이 문제는 곧...
Json String을 만들때.. model 안에 있는 모든 Object를 (물론 BindingResult 관련한 객체는 지워주고.. ) 대상으로 ..
만들어 버리기 때문이다.

이게 무슨 문제인가 하면.. ;; 원치 않는 객체를 Json String으로 만들면서 오버헤드가 일어날뿐만아니라..
개발자가 의도 하지 않은 예외가 발생할 수 있다..  이걸 단위 테스트로 잡아 내기도 .. 쉽지도 않다.. (기준은 나처럼 허접탱이에게 국한된 이야긴 하지만..ㅋ)

머머 이래 저러한 이유로 인해서.. 전에 만들다가 만 .. Jsonview를 다시 만드는 중이다.. ;;
view 를 만들긴 정말 쉽다.. 원하는 데로 동작을 안해서 그렇치..ㅋ

무튼 이번에 다시 만들게 되는건 Spring3.0에서 릴즈된 .. MappingJacksonJsonView 이라는 놈을 상속 받아 필터 기능을 추가했다.. 기존의 filterModel가 있긴헌데.. 오버라이딩이 만만치 않다.. 아니 지저분해진다..

    protected Map<String, Object> filterModel(Map<String, Object> model) {
        Map<String, Object> result = new HashMap<String, Object>(model.size());
        Set<String> renderedAttributes =
                !CollectionUtils.isEmpty(this.renderedAttributes) ? this.renderedAttributes : model.keySet();
        for (Map.Entry<String, Object> entry : model.entrySet()) {
            if (!(entry.getValue() instanceof BindingResult) && renderedAttributes.contains(entry.getKey())) {
                result.put(entry.getKey(), entry.getValue());
            }
        }
        return result;
    }

this.renderedAttributes 이놈이 문제이다.. ;;
private Set<String> renderedAttributes; 이렇게 선언되어 있고.. Set 메소드만 제공하고.. get은 제공하지 않는다..
그래서 확장이 불가능하다. 제길쓴..;;
리플렉션을 써써 쉽게 갈까 햇는데... 너무 어거지로 하는것 같아서 .. 택하지 않앗다..
* @author Jeremy Grelle * @author Arjen Poutsma 이 두사람이 이걸 만들었는데.. ;; get메소드만 추가 해줘도 ..
fillterModel를 충분히 변형해서 쓸수 있을것을... ;; 확장 하지 말라는 의도인가;;

머 무튼.. 그래서 다른 방법으로 ;; 필터를 추가 했다..

그리고 Test를 했는데.. 실패다... ;;;
시나리오의 실패 & 명확하지 않은 코딩 .. 이 두가지 이유로.. 젝일.. ;;

다시 시나리오 짜서 .. 다시 명확한 코딩을 ㄱㄱㄱㄱㄱ ..
쉬운 방법 두고 삽질 이빠심 하는거 일 수도 잇는데..
Jsonview를 호출 하려면 기본 시그너처에 modelMap을 꼭 적어줘야 하고 ..
addObject 하기전에 modelMap.clear() 해주는 .. 단순 코딩을 싫으니까;; 
이짓하는거다... ;;





Posted by is윤군