Spring에서 JSON 사용법(jsonView)

    필자는 전자정부프레임워크(EgovFramework, egov)로 개발을 많이하다보니 최근에 유행하는 RestController나 기타 여러가지 방식보다 jsonView 방식을 선호하고 있다. jsonView 설정은 2010년초부터 사용하여 지금까지 잘 이용하고 있으며 대국민 서비스에서도 이상없이 빠른 속도로 response되기에 불편함도 없을 뿐더러, 오히려 메소드 모양이 통일되어 선호하는 방식이다.

     

    jsonView는 controller 단에서 return 값을 string으로 통일 시켜 주기 때문에 모든 controller가 string으로 선언되어 일관된 모습을 보일 수 있다. 필자가 설정한 프레임워크는 전자정부프레임워크 3.9 버전(현재 최신버전)이고 스프링은 4.3.22 버전이다. 이 방식은 어떤 스프링 버전을 하든 작동이 잘 되기 때문에 해보진 않았지만 spring-boot 같은 경우도 잘 될것이라 믿고 있다(...)

     

    pom.xml

    <properties>
    	<spring.maven.artifact.version>4.3.22.RELEASE</spring.maven.artifact.version>
    	<egovframework.rte.version>3.9.0</egovframework.rte.version>
    	<jackson.version>2.11.3</jackson.version>		
    </properties>

    우선 pom.xml을 보면, 기존에 spring과 egovframework 버전이 있는데 여기에 jackson.version이라는 것을 추가한다. 필수는 아니지만 편리하기에...

     

    <dependency>
    	<groupId>com.fasterxml.jackson.core</groupId>
    	<artifactId>jackson-databind</artifactId>
    	<version>${jackson.version}</version>
    </dependency>

    그리고 com.fasterxml.jackson.core.jackson-databind를 추가한다. 이때 2.11.3과 같이 버전을 직접 할 수 있지만 추후 jackson.core를 여러가지 설치할 경우 버전을 통일 시켜줘서 깔끔하기 때문에 필자는 이 방식을 선호한다.

     

    dispatcher-servlet.xml

    WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml에서 다음과 같은 내용을 추가한다

    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
    	<property name="order" value="0"/>
    </bean>
    	    
    <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
       	<property name="contentType" value="application/json;charset=UTF-8"> </property>
    </bean>

    MappingJackson2JsonView를 추가하여, jsonView라는 리턴값을 줄 경우, jsonview로 매핑하게 수정한다. 추가적으로 BeanNameViewResolver라는 리졸브 설정도 추가해야 한다.

     

     

    소스 예제

    설정은 다 끝이 났다. 이제 코드를 작성해야 하는데 아래 코드는 필자의 예시 코드이다.

    /**
     * Example Controller
     * 
     * @author steel
     * @since 2020.10.14 
     */
    @Controller
    @RequestMapping("/apis/v1")
    public class ExampleController {
    
    	/** EgovPropertyService */
    	@Resource(name = "propertiesService")
    	protected EgovPropertyService propertiesService;
    
    	/** Validator */
    	@Resource(name = "beanValidator")
    	protected DefaultBeanValidator beanValidator;
    	
    
    	/**
    	 * 예제
    	 * 
    	 * @param model
    	 * @return "jsonView"
    	 */
    	@GetMapping(value = "/example")
    	public String selectExampleList(ModelMap model) {
    		model.addAttribute("test_str", "1234");
    		return "jsonView";
    	}
    }

    코드를 실행하면 위와 같이 test_str이 정상적으로 나오는 것을 확인 할 수 있다. 참고로 위 소스에서 example로 실행을 하는데 전자정부프레임워크에서 별도의 web.xml을 설정을 한 것이고, 기본적으로 example.do와 같이 .do를 넣어서 실행을 해야 url을 인식할 수 있을 것이다.

     

     

    댓글

    Designed by JB FACTORY