`

Spring MVC 学习笔记 九 json格式的输入和输出

 
阅读更多

Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用

		<!-- json -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-lgpl</artifactId>
			<version>1.8.1</version>
		</dependency>

		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-lgpl</artifactId>
			<version>1.8.1</version>
		</dependency>

 

先修改之前的helloworld.jsp,增加客户端json格式的数据输入。

	var cfg = 	{
	    type: 'POST', 
	    data: JSON.stringify({userName:'winzip',password:'password',mobileNO:'13818881888'}), 
	    dataType: 'json',
	    contentType:'application/json;charset=UTF-8',	    
	    success: function(result) { 
	        alert(result.success); 
	    } 
	};

function doTestJson(actionName){
	cfg.url = actionName;
	$.ajax(cfg);
}

 根据前面的分析,在spring mvc中解析输入为json格式的数据有两种方式
1:使用@RequestBody来设置输入

    @RequestMapping("/json1")
    @ResponseBody
	public JsonResult testJson1(@RequestBody User u){
    	log.info("get json input from request body annotation");
    	log.info(u.getUserName());
    	return new JsonResult(true,"return ok");
}

 2:使用HttpEntity来实现输入绑定

    @RequestMapping("/json2")    
    public ResponseEntity<JsonResult> testJson2(HttpEntity<User> u){
    	log.info("get json input from HttpEntity annotation");
    	log.info(u.getBody().getUserName());
    	ResponseEntity<JsonResult> responseResult = new ResponseEntity<JsonResult>( new JsonResult(true,"return ok"),HttpStatus.OK);
    	return responseResult;
}

 

Json格式的输出也对应有两种方式
1:使用@responseBody来设置输出内容为context body
2:返回值设置为ResponseEntity<?>类型,以返回context body
另外,第三种方式是使用ContentNegotiatingViewResolver来设置输出为json格式,需要修改servlet context配置文件如下

	<bean
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<property name="order" value="1" />
		<property name="mediaTypes">
			<map>
				<entry key="json" value="application/json" />
			</map>
		</property>
		<property name="defaultViews">
			<list>
				<bean
					class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
			</list>
		</property>
		<property name="ignoreAcceptHeader" value="true" />
	</bean>

 但这种格式的输出会返回{model类名:{内容}} 的json格式,
例如,以下代码

    @RequestMapping("/json3.json")
    public JsonResult testJson3(@RequestBody User u){
    	log.info("handle json output from ContentNegotiatingViewResolver");
    	return new JsonResult(true,"return ok");
    }

 

期望的返回是 {success:true,message:”return ok”};
但实际返回的却是 {"jsonResult":{"success":true,"msg":"return ok"}}
原因是MappingJacksonJsonView中对返回值的处理未考虑modelMap中只有一个值的情况,直接是按照mapName:{mapResult}的格式来返回数据的。
修改方法,重载MappingJacksonJsonView类并重写filterModel方法如下

    protected Object filterModel(Map<String, Object> model) {  
        Map<?, ?> result = (Map<?, ?>) super.filterModel(model);  
        if (result.size() == 1) {  
            return result.values().iterator().next();  
        } else {  
            return result;  
        }  
    }  

 

分享到:
评论

相关推荐

    Spring MVC学习笔记之json格式的输入和输出

    以上就是在Spring MVC中处理JSON格式输入输出的几种方法。在实际开发中,根据需求的不同,开发者可以选择最适合的处理方式。值得注意的是,要确保客户端和服务器端处理JSON格式时,数据格式是一致的,这样才能正确地...

    Spring MVC 学习笔记 十二 PDF/Excel格式输出

    本学习笔记主要围绕Spring MVC的使用、配置和核心组件进行深入探讨,旨在帮助开发者更好地理解和掌握这一框架。 在Spring MVC中,Model代表业务逻辑和数据,View负责数据的展示,而Controller处理用户请求,协调...

    spring MVC学习笔记

    在学习Spring MVC的过程中,我们首先需要了解的是控制器(Controller)的基本概念。控制器是处理用户请求并返回响应给用户的组件。在Spring MVC中,通过@Controller注解标记一个类为控制器。一个控制器类中可以包含...

    Spring MVC 学习笔记 十一 data binding

    本学习笔记将深入探讨Spring MVC中的数据绑定特性。 1. **数据绑定的基本概念** 数据绑定是Spring MVC中的一种核心功能,它允许我们将HTTP请求参数、JSON或XML数据自动映射到Java对象的属性上。这减少了手动提取...

    Spring MVC 学习笔记 七 controller中其他可用的annotation

    这篇"Spring MVC 学习笔记 七 controller中其他可用的annotation"可能涵盖了除我们常见的`@RequestMapping`之外的其他注解,这些注解使得控制器功能更加丰富和灵活。下面将详细探讨Spring MVC中Controller相关的注解...

    基于注解的spring_3.0.x_MVC学习笔记

    在本篇基于注解的Spring 3.0.x MVC学习笔记中,我们将深入探讨Spring MVC在3.0版本中的变化,以及如何通过注解实现快速开发。Spring 3.0.x相较于2.5版本有着显著的改进,尤其在MVC模块上,提供了更加灵活和强大的...

    json-lib 学习笔记 分享下

    这个学习笔记主要围绕`json-lib`的使用方法和关键特性进行阐述。 首先,`json-lib`支持多种Java对象到JSON的转换,包括基本类型、数组、集合、Map以及自定义的Java类。例如,你可以通过以下方式将一个HashMap转换为...

    Spring Boot 学习笔记完整教程.pdf

    ### Spring Boot 学习笔记知识点 #### 1. Spring Boot 简介 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它使用了特定的方式来配置Spring,使得开发者...

    《Jackson 框架,轻易转换JSON》学习笔记

    本篇学习笔记将深入探讨Jackson框架的核心概念和使用方法,帮助你轻松应对JSON与Java对象之间的转换。 1. Jackson简介 Jackson是由FasterXML团队开发的一个开源项目,其主要目标是提供高性能、高效率的JSON处理功能...

    Spring Boot 学习笔记完整教程new

    这个学习笔记的完整教程涵盖了从基础到进阶的多个主题,旨在帮助初学者快速上手并深入理解Spring Boot的核心特性。 1. **Spring Boot HelloWorld**:这是每个教程的起点,通常包括创建一个新的Spring Boot项目,...

    spring学习文档及源码笔记

    通过深入学习这些知识点,并结合提供的源码笔记,你可以更好地理解 Spring MVC 的设计模式和最佳实践,从而更高效地开发 Web 应用。此外,了解如何利用 Spring Boot 进行自动化配置和快速开发也是现代 Web 开发的...

    springmvc学习笔记-返回json的日期格式问题的解决方法

    在Spring MVC框架中,处理...通过对这些知识点的学习和应用,可以有效地控制JSON日期格式的输出,满足不同场景下的业务需求。同时,也应该注意到,配置和编码工作应当遵循项目的编码规范,保持代码的清晰和可维护性。

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    ### Struts、Spring、Hibernate&Ajax 学习笔记总结 #### Struts 部分 **Struts** 是 Java 开源框架中最早出现且最具影响力的框架之一,它出自 Apache 组织,是 Java Web 应用开发的标准之一。Struts 以 MVC(Model...

    Spring学习思维笔记.rar

    这份"Spring学习思维笔记"很可能是整理了Spring框架的关键概念、核心组件以及实际应用中的最佳实践,通过思维导图的形式帮助学习者理解和记忆。 首先,让我们来看看Spring框架的核心知识点: 1. **控制反转(IoC)...

    ExtJs5+Spring.Net+MVC项目搭建笔记

    综上所述,"ExtJs5+Spring.Net+MVC项目搭建笔记"涵盖了多种技术的集成与应用,旨在帮助开发者理解和实践现代Web开发的最佳实践,创建出健壮、灵活的Web应用程序。通过深入学习和实践,开发者不仅可以掌握这些工具和...

    spring5mvc第一天【大纲笔记】.zip

    本大纲笔记将带你逐步深入理解SpringMVC的核心概念和使用方法。 一、SpringMVC 入门 1.1 引入SpringMVC 首先,我们需要在项目中引入SpringMVC的依赖,这通常通过在Maven或Gradle的配置文件中添加相应的依赖项来完成...

    Spring Security笔记.rar

    Spring Security 是一个强大的且高度可定制的框架,用于为Java应用程序提供身份验证和授权服务。它主要用于保护基于Spring的...通过学习本笔记,你可以逐步掌握Spring Security的基础知识,并将其运用到实际项目中。

    尚硅谷SpringMVC部分全套教学文档笔记

    《尚硅谷SpringMVC部分全套教学文档笔记》涵盖了SpringMVC框架的核心概念和技术,通过一系列章节深入浅出地讲解了SpringMVC的各个方面。以下是基于这些文档内容的详细知识点总结: 1. **SpringMVC概述与HelloWorld*...

    Springmvc框架笔记

    4. **JSON数据交互**:支持JSON数据的发送和接收。 5. **RESTful支持**:支持RESTful风格的URL设计。 6. **拦截器**:用于实现跨切关注点,如权限验证、日志记录等。 以上是对SpringMVC基础知识及高级应用的总结,...

Global site tag (gtag.js) - Google Analytics