복붙노트

[SPRING] @JsonView와 Spring MVC 사용하기

SPRING

@JsonView와 Spring MVC 사용하기

다음 bean 정의를 사용하여 Spring 애플 리케이션이 JSON에서 이야기하도록 만든다.

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />

이 메시지 변환기 Bean을 사용하여 @JsonView 주석을 사용할 수 있습니까?

해결법

  1. ==============================

    1.@JsonView는 v1.4부터 Jackson JSON 프로세서에서 이미 지원됩니다.

    @JsonView는 v1.4부터 Jackson JSON 프로세서에서 이미 지원됩니다.

    새 편집 : Jackson 1.9.12 용으로 업데이트되었습니다.

    v1.8.4 설명서에 따르면 writeValueUsingView를 사용하는 함수는 이제 더 이상 사용되지 않습니다. ObjectMapper.viewWriter (java.lang.Class)를 대신 사용하십시오 ... 그러나 1.9부터는 사용되지 않으므로 writerWithView (Class)를 대신 사용하십시오! (v1.9.9 문서 참조)

    그래서 여기에 .writerWithView (Views.Public.class)를 사용하고 있기 때문에 확장 된 {name : "name"}이 아닌 {id : 1}을 반환하는 Spring 3.2.0과 Jackson 1.9.12로 테스트 한 업데이트 된 예제가 있습니다. ). Views.ExtendPublic.class로 전환하면 { "id": 1, "name": "name"}이됩니다.

    package com.demo.app;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import org.codehaus.jackson.map.annotate.JsonView;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.map.ObjectWriter;
    
    import javax.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    @Controller
    public class DemoController {
        private final ObjectMapper objectMapper = new ObjectMapper();
    
        @RequestMapping(value="/jsonOutput")
        @ResponseBody
        public String myObject(HttpServletResponse response) throws IOException {
            ObjectWriter objectWriter = objectMapper.writerWithView(Views.Public.class);
            return objectWriter.writeValueAsString(new MyObject());
        }
    
        public static class Views {
            static class Public {}
            static class ExtendPublic extends Public {}
        }
    
        public class MyObject {
            @JsonView(Views.Public.class) Integer id = 1;
            @JsonView(Views.ExtendPublic.class) String name = "name";
        }
    }
    

    이전 편집 : ObjectMapper를 인스턴스화하고 여기에 표시된대로 또는이 예제에서 사용자 정의보기를 사용하여 객체를 작성해야합니다.

    보기 정의 :

    class Views {
        static class Public {}
        static class ExtendedPublic extends PublicView {}
        ...
    }
    
    public class Thing {
        @JsonView(Views.Public.class) Integer id;
        @JsonView(Views.ExtendPublic.class) String name;
    }
    

    보기 사용 :

    private final ObjectMapper objectMapper = new ObjectMapper();
    
    @RequestMapping(value = "/thing/{id}")
    public void getThing(@PathVariable final String id, HttpServletResponse response) {
        Thing thing = new Thing();
        objectMapper.writeValueUsingView(response.getWriter(), thing, Views.ExtendPublic.class);
    }
    

    Jackson> = 1.7을 사용하는 경우 @JSONFilter가 사용자의 요구에 더 잘 맞습니다.

  2. ==============================

    2.@JsonView 주석은 Spring에서 지원되지 않았지만이 문제는 해결되었습니다! 팔로우

    @JsonView 주석은 Spring에서 지원되지 않았지만이 문제는 해결되었습니다! 팔로우

    이것은 SPR-7156입니다.

    Spring 버전 4.1 이상에서 사용 가능

    봄 감사합니다!

  3. from https://stackoverflow.com/questions/5772304/using-jsonview-with-spring-mvc by cc-by-sa and MIT license