关于@reponseBody和response.getWriter().println()输出JSON的一个区别

2023-12-01 22:58

本文主要是介绍关于@reponseBody和response.getWriter().println()输出JSON的一个区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先来看看response.getWriter().println()的使用及返回的结果:

 @RequestMapping({"/wxLogin"})public void wxLogin(HttpServletRequest request, HttpServletResponse response)throws Exception{response.setCharacterEncoding("utf-8");String json = "";Gson gson = new Gson();Map<String,Object> map = new HashMap<String,Object>();PrintWriter out = response.getWriter();String id="sn258369";WXInfo wxInfo=wxInfoService.findById(id);String id2="sn357159";User user=userService.findById(id2);map.put("wxInfo", wxInfo);map.put("user",user);json=gson.toJson(map);out.print(json);out.flush();out.close();}

返回结果如下:

{"wxInfo":{"id":"189e725696fb44cd8f8c1519deb40148","nickName":"@\"nickname\" : @\"你你若安好111\"\"","sex":"1","country":"China","province":"Guangdong","city":"Shenzhen","unionId":"oWuV20tjS-8h12xxxc","openId":"oca0s6LxxxAU","avatarUrl":"http://thirdwx.qeUribdzW3GSQj2Q/132","mobilePhone":"139xxxxx802","subscribe":0,"createdDate":"2019-09-11 14:09:11.0","updatedDate":"2019-12-24 11:11:57"},"user":{"userId":"727","userName":"139xxxxx802","name":"Daniel","birthday":"1990-01-14 17:18:16.0","sex":"1","mobilePhone":"139xxxxx802","registerTime":"2019-06-05 18:02:11.0"},"status":2}

可以看到各个属性均有值,没有出现值为null的属性。再来看看使用@Responsebody的写法和返回结果:

    @RequestMapping("/wxLogin")@ResponseBodypublic Map<String, Object> wxLogin(HttpServletRequest request,HttpServletResponse response)throws Exception{response.setCharacterEncoding("utf-8");int status=0;Gson gson=new Gson();Map<String, Object>map=new HashMap<String, Object>();String id="sn258369";WXInfo wxInfo=wxInfoService.findById(id);String id2="sn357159";User user=userService.findById(id2);map.put("wxInfo", wxInfo);map.put("user",user);return map;}

返回结果如下:

{

    "wxInfo": {

        "id": "189e7256deb40148",

        "nickName": "@\"nickname\" : @\"你你若安好111安\"\"",

        "sex": "1",

        "country": "China",

        "province": "Guangdong",

        "city": "Shenzhen",

        "userId": null,

        "unionId": "oWuV20tjxxxDxc",

        "openId": "oca0s6xxxxeIH3AU",

        "avatarUrl": "http://thirdwx.qlogo.cn/2Q/132",

        "mobilePhone": "139xxxxx802",

        "subscribe": 0,

        "createdDate": "2019-09-11 14:09:11",

        "updatedDate": "2019-12-24 13:22:23"

    },

    "user": {

        "userId": "727",

        "userName": "139xxxxx802",

        "password": "",

        "name": "Daniel",

        "birthday": "1990-01-14",

        "sex": "1",

        "bloodType": null,

        "email": "",

        "height": null,

        "weight": null,

        "qqNum": null,

        "weChat": null,

        "weiBo": null,

        "homePhone": null,

        "mobilePhone": "1319xxxxx802",

        "officePhone": null,

        "country": null,

        "ctyId": null,

        "province": null,

        "city": null,

        "district": null,

        "address": null,

        "allergy": null,

        "remark": null,

        "dataURL": null,

        "registerTime": "2019-06-05 18:02:11.0",

        "ssuppliercode": null

    },

    "status": 2

}

可以看到,在返回user对象的时候,出现很多值为null的属性,这些属性均为user中的属性,但数据库查询到的值为null。

这是两种推送JSON方式,返回结果的差异,Gson已屏蔽掉值为null的属性,而@ResponseBody则根据对象的所有属性原原本本地返回。

这篇关于关于@reponseBody和response.getWriter().println()输出JSON的一个区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/443020

相关文章

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实