spring MVC 返回json

简介:

spring MVC如何返回json呢?

有两种方式:

方式一:使用ModelAndView

Java代码   收藏代码
  1. @ResponseBody  
  2.     @RequestMapping("/save")  
  3.     public ModelAndView save(SimpleMessage simpleMessage){  
  4.         //查询时可以使用 isNotNull  
  5.         if(!ValueWidget.isNullOrEmpty(simpleMessage)){  
  6.             try {  
  7.                 //把对象中空字符串改为null  
  8.                 ReflectHWUtils.convertEmpty2Null(simpleMessage);  
  9.             } catch (SecurityException e) {  
  10.                 e.printStackTrace();  
  11.             } catch (NoSuchFieldException e) {  
  12.                 e.printStackTrace();  
  13.             } catch (IllegalArgumentException e) {  
  14.                 e.printStackTrace();  
  15.             } catch (IllegalAccessException e) {  
  16.                 e.printStackTrace();  
  17.             }  
  18.         }  
  19.         simpleMessage.setCreateTime(TimeHWUtil.getCurrentTimestamp());  
  20.         simpleMessage.setHasReply(Constant2.SIMPLE_MESSAGE_HAS_REPLY_NOT_YET);  
  21.         this.simpleMessageDao.add(simpleMessage);  
  22.         Map map=new HashMap();  
  23.         map.put("result""success");  
  24.         return new ModelAndView(new MappingJacksonJsonView(),map);  
  25.     }  

 

 

方式二:返回String

Java代码   收藏代码
  1. /*** 
  2.      * {"fileName":"20141002125209_571slide4.jpg","path":"D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\upload\\image\\20141002125209_571slide4.jpg"} 
  3.      * @param file 
  4.      * @param request 
  5.      * @param response 
  6.      * @return 
  7.      * @throws IOException 
  8.      */  
  9.     @ResponseBody  
  10.     @RequestMapping(value = "/upload")  
  11.     public String upload(  
  12.             @RequestParam(value = "image223", required = false) MultipartFile file,  
  13.             HttpServletRequest request, HttpServletResponse response)  
  14.             throws IOException {  
  15.         String content = null;  
  16.         Map map = new HashMap();  
  17.         if (ValueWidget.isNullOrEmpty(file)) {  
  18.             map.put("error""not specify file!!!");  
  19.         } else {  
  20.             System.out.println("request:" + request);// org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest@7063d827  
  21.             System.out.println("request:" + request.getClass().getSuperclass());  
  22.               
  23.             // // System.out.println("a:"+element+":$$");  
  24.             // break;  
  25.             // }  
  26.             String fileName = file.getOriginalFilename();// 上传的文件名  
  27.             fileName=fileName.replaceAll("[\\s]",   "");//IE中识别不了有空格的json  
  28.             // 保存到哪儿  
  29.             String finalFileName = TimeHWUtil.formatDateByPattern(TimeHWUtil  
  30.                     .getCurrentTimestamp(),"yyyyMMddHHmmss")+ "_"  
  31.                             + new Random().nextInt(1000) + fileName;  
  32.             File savedFile = getUploadedFilePath(request,  
  33.                     Constant2.UPLOAD_FOLDER_NAME + "/image", finalFileName,  
  34.                     Constant2.SRC_MAIN_WEBAPP);// "D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\ upload\\pic\\ys4-1.jpg"  
  35.             System.out.println("[upload]savedFile:"  
  36.                     + savedFile.getAbsolutePath());  
  37.             // 保存  
  38.             try {  
  39.                 file.transferTo(savedFile);  
  40.             } catch (Exception e) {  
  41.                 e.printStackTrace();  
  42.             }  
  43.               
  44.             ObjectMapper mapper = new ObjectMapper();  
  45.               
  46.               
  47.   
  48.             map.put("fileName", finalFileName);  
  49.             map.put("path", savedFile.getAbsolutePath());  
  50.             try {  
  51.                 content = mapper.writeValueAsString(map);  
  52.                 System.out.println(content);  
  53.             } catch (JsonGenerationException e) {  
  54.                 e.printStackTrace();  
  55.             } catch (JsonMappingException e) {  
  56.                 e.printStackTrace();  
  57.             } catch (IOException e) {  
  58.                 e.printStackTrace();  
  59.             }  
  60. //          System.out.println("map:"+map);  
  61.         }  
  62.   
  63. /* 
  64.  * {"fileName":"20141002125209_571slide4.jpg","path":"D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\upload\\image\\20141002125209_571slide4.jpg"} 
  65.  * */  
  66.         return content;  
  67.   
  68.     }  

 

两种方式有什么区别呢?

方式一:使用ModelAndView的contentType是"application/json"

方式二:返回String的            contentType是"text/html"

那么如何设置response的content type呢?

使用注解@RequestMapping 中的produces:

Java代码   收藏代码
  1. @ResponseBody  
  2.     @RequestMapping(value = "/upload",produces="application/json;charset=UTF-8")  
  3.     public String upload(HttpServletRequest request, HttpServletResponse response,String contentType2)  
  4.             throws IOException {  
  5.         String content = null;  
  6.         Map map = new HashMap();  
  7.         ObjectMapper mapper = new ObjectMapper();  
  8.   
  9.         map.put("fileName""a.txt");  
  10.         try {  
  11.             content = mapper.writeValueAsString(map);  
  12.             System.out.println(content);  
  13.         } catch (JsonGenerationException e) {  
  14.             e.printStackTrace();  
  15.         } catch (JsonMappingException e) {  
  16.             e.printStackTrace();  
  17.         } catch (IOException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.         if("json".equals(contentType2)){  
  21.             response.setContentType(SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF);  
  22.         }  
  23.         return content;  
  24.   
  25.     }  

 

@RequestMapping(value ="/upload",produces="application/json;charset=UTF-8")

@RequestMapping(value = "/upload",produces="application/json")

spring 官方文档说明:

Producible Media Types

You can narrow the primary mapping by specifying a list of producible media types. The request will be matched only if the Accept request header matches one of these values. Furthermore, use of the produces condition ensures the actual content type used to generate the response respects the media types specified in the producescondition. For example:

@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
    // implementation omitted
}

Just like with consumes, producible media type expressions can be negated as in !text/plain to match to all requests other than those with an Accept header value oftext/plain.

Tip
[Tip]

The produces condition is supported on the type and on the method level. Unlike most other conditions, when used at the type level, method-level producible types override rather than extend type-level producible types.

 

参考:http://hw1287789687.iteye.com/blog/2128296

http://hw1287789687.iteye.com/blog/2124313

相关文章
|
22天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
38 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
153 2
|
3月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
4月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
3月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
102 2
|
3月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
67 2
|
3月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
238 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
4月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
5月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
5月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查