JAVA

[Jackson/Json]Binding

k9e4h 2016. 4. 19. 14:05

Jackson API 참고


https://javadocs.com/docs/com.ovea/jetty-session-redis/1.0/org/codehaus/jackson/map/ObjectMapper.java



Json : 데이터를 넘기는 역할

Jackson : binding 해주는 / objectMapper 제공


< build.gradle >

compile 'org.json:json:20160212'

compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'



jackson

readTree : 계층구조의 json Data를 Mapping


Object를 Map으로 변환 할 때에는 PropertyUtils를 사용 / Map에서 Object로 변활 할 때에는 BeanUtils 를 사용




Map to VO Binding


Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    public Block addJsonBlockPOST(@RequestBody Map map) throws Exception {
 
        System.out.println("(/block/blockSave)RequestBody로 전달받은 String(JSON) : "+map);
 
        String keyAttribute = null;
        String setMethodString = "set";
        String methodString = null;
 
        Block test= new Block();
        Iterator itr = map.keySet().iterator();
 
//        1. Map의 method    
//        keySet() return type : Set<K>
//        Returns a Set view of the keys contained in this map.
//        2. Set 의 method
//        iterator() return type: Interator<E>
//        Returns an iterator over the elements in this set.
        while(itr.hasNext()){
//        3. Interator의 method
//        hasNext() return boolean
//        Returns true if the iteration has more elements.
 
            keyAttribute = (String) itr.next();
            methodString = setMethodString+keyAttribute.substring(0,1).toUpperCase()
                    +keyAttribute.substring(1);
            // ex Emotion이면 
            //set +E+motion -> setEmotion을 불러오기
 
            Method[] methods = test.getClass().getDeclaredMethods();
            //BlockVO에 있는 method 가져오기
//            4. Class의 method
//            getDeclaredMethods() return type Method[]
//            Returns an array containing Method objects reflecting 
//            all the declared methods of the class or interface represented by this Class object, 
//            including public, protected, default (package) access, and private methods, 
//            but excluding inherited methods.
            
            for(int i=0;i<=methods.length-1;i++){
                if(methodString.equals(methods[i].getName())){
                    System.out.println("Method[] : "+methods[i]);
                    System.out.println("invoke : "+methodString);
                    methods[i].invoke(test, map.get(keyAttribute));
//                    5. Method[] 의 method
//                    invoke(Object obj, Object... args)
//                    Invokes the underlying method represented by this Method object, 
//                    on the specified object with the specified parameters.
                }
            }
        }
        
//         1. Map의 key만큼 Loop를 돌며+key값의 첫번째 글자를 대문자로 바꾼다.(보통 name이라는 필드가 있다면 set메소드는 setName 이니까)
//         2. 넘긴 POJO의 선언된 Method를 가져와서 우리가 필요한(set할) 메소드를 찾는당
//         3. 메소드 실행하며 값을 넘겨준다~ (invoke)
        
        
        System.out.println(test);
        System.out.println("----------------Test종료--------------");
        System.out.println("----------------Test종료--------------");
        System.out.println("----------------Test종료--------------");
        System.out.println("----------------Test종료--------------");
cs


html에서 넘겨주는 data


blockEmotionList: dummyEmotion

                , note: dummyNote

                , blockHashList: dummyHashCodes


반응형

'JAVA' 카테고리의 다른 글

JAVA SWING 링크 정리  (0) 2016.12.06
Design Pattern  (0) 2016.04.22
[openAPI] openAPI 사용하기  (0) 2016.04.06
[BOWER] bower 설치  (0) 2016.04.05
정리해야할 것  (0) 2016.03.23