MappingJacksonHttpMessageConverter spring返回json

Spring mvc 返回json格式

 

一、使用maven管理jar。

<dependency>
        <groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-core-lgpl</artifactId>
	<version>1.9.6</version>
</dependency>
<dependency>
        <groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-core-asl</artifactId>
	<version>1.9.4</version>
</dependency>
<dependency>
        <groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-mapper-asl</artifactId>
	<version>1.9.5</version>
</dependency>
<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-mapper-lgpl</artifactId>
	<version>1.9.6</version>
</dependency>

 二、配置spring-servlet.xml:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">    
		<property name="messageConverters">    
			<list >    
				<ref bean="mappingJacksonHttpMessageConverter" />    
			</list>    
		</property>    
	</bean>

 mappingJacksonHttpMessageConverter : 用来处理json格式转换

<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>application/json;charset=UTF-8</value>  
       </list>  
    </property>
</bean>

 

1、

如果 mappingJacksonHttpMessageConverter 可以 直接写成如下:

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

 

这样默认应该是 : UTF-8

2、

supportedMediaTypes 的 list 里面 可以写多个value

<list>

<value>apolication/json; charset=UTF-8</value>

<value>text/html;charset=UTF-8</value>

</list>

 三、controller 配置@ResponseBody

@Controller
public class LoginController {
	@RequestMapping(value="/validataUser.json")
	@ResponseBody
	public Map<String,Object> validataUser(@RequestParam String userName){
		logger.info(" validata user : {}",userName);
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("code", true);
		return map;
	}
}

 四:页面上仍然按照原来的ajax区json的格式一样、


MappingJacksonHttpMessageConverter spring返回json
 

 题外话:

关于 @ResponseBody:

将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视图处理部分,而是调用适合HttpMessageConverter,将返回值写入输出流。

 

 

===============================================================================

 

spring MVC之返回JSON数据(Spring3.0 MVC) 

 

我们在本示例中,使用Spring3.0 MVC, Spring 3.0 MVC已经支持JSON了。 
这里我们使用基于注解的方式,也是springMVC 3.0所支持的RESTFul风格的。 

 

1.首先加入两个jar依赖,这里以maven构建为例:

<dependency>  
    <groupId>org.codehaus.jackson</groupId>  
    <artifactId>jackson-core-asl</artifactId>  
    <version>1.8.4</version>  
</dependency>  
<dependency>  
    <groupId>org.codehaus.jackson</groupId>  
    <artifactId>jackson-mapper-asl</artifactId>  
    <version>1.8.4</version>  
</dependency>  
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>1.8.4</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.8.4</version> 
</dependency>

 这是spring MVC处理json数据时,所必须的jar依赖。

 

2.在spring mvc的配置文件中加入配置 
这里我们使用的是spring mvc的注解,如例:

 

<context:component-scan base-package="com.hundsun.twioo.business.action" />  
<bean class="org.springframework.web.servlet.mvc.annotation.   
    DefaultAnnotationHandlerMapping" />  
<bean class="org.springframework.web.servlet.mvc.annotation.   
    AnnotationMethodHandlerAdapter" >  
    <property name="messageConverters">  
        <util:list id="beanList">  
            <ref bean="mappingJacksonHttpMessageConverter"/>  
        </util:list>  
    </property>  
</bean>  
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.   
    http.converter.json.MappingJacksonHttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>text/html;charset=UTF-8</value>  
        </list>  
    </property>  
</bean>  
<context:annotation-config/>  

<context:component-scan base-package="com.hundsun.twioo.business.action" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > 
    <property name="messageConverters"> 
        <util:list id="beanList"> 
            <ref bean="mappingJacksonHttpMessageConverter"/> 
        </util:list> 
    </property> 
</bean> 
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="supportedMediaTypes"> 
        <list> 
            <value>text/html;charset=UTF-8</value> 
        </list> 
    </property> 
</bean> 
<context:annotation-config/>

  

 注意:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的Bean配置中,我们加入了messageConverters属性,在该属性中我们有配置mappingJacksonHttpMessageConverter这个Bean,它就是用来处理json数据转换的。 

在mappingJacksonHttpMessageConverter的Bean配置中,我们有一个supportedMediaTypes属性,在这个属性中我们添加了text/html;charset=UTF-8这个值,它是为了处理返回的json数据的编码,默认是UTF-8,如果有乱码的情况,我们只需要修改这里就可以了。 

 

3.控制器Controller上的注解使用 
如例:

@Controller  
@RequestMapping("/logins")   
public class LoginController {   
  
    @Autowired  
    private LoginManagerService loginManagerService;   
    @Autowired  
    private PermitManagerService permitManagerService;   
    private Logger log = Logger.getLogger(LoginController.class);   
       
       
    /**  
     * 用户登录系统  
     * @return  
     */  
    @RequestMapping(value="/login")   
    public ModelAndView login(HttpServletRequest request,HttpSession session){   
           
        User user = null;   
        List<Module> moduleList = null;   
        try {   
            //TwiooID   
            Integer twiooId = ServletRequestUtils.getIntParameter(request, "twiooId");    
            //群ID   
            Integer groupId = ServletRequestUtils.getIntParameter(request, "groupId");    
            user = loginManagerService.login(twiooId, 3);   
            if(null != user){   
                moduleList = permitManagerService.findPermit(user.getId());   
            }   
            session.setAttribute("user", user);   
            session.setAttribute("permit", moduleList);   
            session.setAttribute("twiooId", twiooId);   
            session.setAttribute("groupId", groupId);   
        } catch (Exception e) {   
            e.printStackTrace();   
            log.error("LoginController.login() execute error!!!");   
        }   
        System.out.println("login...................");   
        return new ModelAndView("index");   
    }   
       
       
    /**  
     * 用户退出系统  
     * @return  
     */  
    @RequestMapping(value="/exit")   
    public ModelAndView exit(HttpServletRequest request,HttpSession session){   
           
        session.removeAttribute("user");   
        session.removeAttribute("permit");   
        session.removeAttribute("twiooId");   
        session.removeAttribute("twiooId");   
        System.out.println("exit....................");   
        return new ModelAndView("index");   
    }   
       
       
    /**  
     * 测试返回JSON数据  
     * @param session  
     * @return  
     */  
    @RequestMapping(value="/test")   
    @ResponseBody  
    public Object test(HttpSession session){   
           
        System.out.println("test....................");   
        return session.getAttribute("permit");   
    }   
       
       
  
    public LoginManagerService getLoginManagerService() {   
        return loginManagerService;   
    }   
    public void setLoginManagerService(LoginManagerService loginManagerService) {   
        this.loginManagerService = loginManagerService;   
    }   
    public PermitManagerService getPermitManagerService() {   
        return permitManagerService;   
    }   
    public void setPermitManagerService(PermitManagerService permitManagerService) {   
        this.permitManagerService = permitManagerService;   
    }   
}  

@Controller 
@RequestMapping("/logins") 
public class LoginController { 

@Autowired 
private LoginManagerService	loginManagerService; 
@Autowired 
private PermitManagerService permitManagerService; 
private Logger log = Logger.getLogger(LoginController.class); 


/** 
* 用户登录系统 
* @return 
*/ 
@RequestMapping(value="/login") 
public ModelAndView login(HttpServletRequest request,HttpSession session){ 

User user = null; 
List<Module> moduleList = null; 
try { 
//TwiooID 
Integer twiooId = ServletRequestUtils.getIntParameter(request, "twiooId"); 
//群ID 
Integer groupId = ServletRequestUtils.getIntParameter(request, "groupId"); 
user = loginManagerService.login(twiooId, 3); 
if(null != user){ 
moduleList = permitManagerService.findPermit(user.getId()); 
} 
session.setAttribute("user", user); 
session.setAttribute("permit", moduleList); 
session.setAttribute("twiooId", twiooId); 
session.setAttribute("groupId", groupId); 
} catch (Exception e) { 
e.printStackTrace(); 
log.error("LoginController.login() execute error!!!"); 
} 
System.out.println("login..................."); 
return new ModelAndView("index"); 
} 


/** 
* 用户退出系统 
* @return 
*/ 
@RequestMapping(value="/exit") 
public ModelAndView exit(HttpServletRequest request,HttpSession session){ 

session.removeAttribute("user"); 
session.removeAttribute("permit"); 
session.removeAttribute("twiooId"); 
session.removeAttribute("twiooId"); 
System.out.println("exit...................."); 
return new ModelAndView("index"); 
} 


/** 
* 测试返回JSON数据 
* @param session 
* @return 
*/ 
@RequestMapping(value="/test") 
@ResponseBody 
public Object test(HttpSession session){ 

System.out.println("test...................."); 
return session.getAttribute("permit"); 
} 



public LoginManagerService getLoginManagerService() { 
return loginManagerService; 
} 
public void setLoginManagerService(LoginManagerService loginManagerService) { 
this.loginManagerService = loginManagerService; 
} 
public PermitManagerService getPermitManagerService() { 
return permitManagerService; 
} 
public void setPermitManagerService(PermitManagerService permitManagerService) { 
this.permitManagerService = permitManagerService; 
} 
}

 注意:test()方法上,我们使用了一个@ResponseBody的注解,Spring3.0 MVC @ResponseBody的作用是把返回值直接写到HTTP response body里。 test()这个方法就是我们这里关注的地方,它就是返回json数据到客户端去的。还要注意,这个test()方法返回的是Object(这里可以是任意类型),而不ModelAndView。

你可能感兴趣的:(MappingJacksonHttpMessageConverter spring返回json)