Spring集成Jackson序列化java对象

测试环境:spring 3.1.1 + Hibernate 3.3.2 + Jackson-all-1.8.0

spring 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Bean头部 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
 
    <context:component-scan base-package="com.ciaos.controller"/>
    <mvc:annotation-driven /> 
    
    <!-- Configure to plugin JSON as request and response in method handler -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonMessageConverter"/>
            </list>
        </property>
    </bean>
     
    <!-- Configure bean to convert JSON to POJO and vice versa -->
    <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    </bean>
   
</beans>

 controller使用示例如下:

package com.ciaos.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ciaos.dao.Account;
import com.ciaos.dao.AccountDAO;
import com.ciaos.dao.Hobby;
import com.ciaos.dao.HobbyDAO;

@Controller
public class DemoController {
    
	@RequestMapping(value ="/rest.json")  
	@ResponseBody 
    public Object json(@RequestParam Integer id){
        
		AccountDAO dao = new AccountDAO();
		Account account = dao.findById(id);
		
		Map<String, Object> response = new HashMap<String, Object>();
	    response.put("result", account);
	    
        return response;
    }
		
	@RequestMapping(value ="/rest.jsonp", produces = "text/javascript;charset=UTF-8")  
	@ResponseBody 
    public Object jsonp(@RequestParam("callback") String callback, @RequestParam Integer id){
        
		HobbyDAO dao = new HobbyDAO();
		List<Hobby> list = dao.findAll();
		
		Map<String, Object> response = new HashMap<String, Object>();
	    response.put("result", list);
	    
	    ObjectMapper mapper = new ObjectMapper();
	    String resultstr = null;
	    try {
	    	resultstr = mapper.writeValueAsString(response);
		} catch (JsonGenerationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JsonMappingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return callback + "(" + resultstr + ")";
    }
}

POJO类增加@JsonIgnore防止递归错误

//Account.java (隐藏不需要的字段)

	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@JsonIgnore
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

//Hobby.java (防止递归)

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "accountid")
	@JsonIgnore
	public Account getAccount() {
		return this.account;
	}

猜你喜欢

转载自ciaos.iteye.com/blog/2207649