json使用小结

json 使用小结

此篇仅仅为我遇到的问题。

环境SpringBoot 2.1.7

首先需要知道的是Springboot 默认使用的是Jackson,即使没有配置,@ResponseBody 即可。但是后期我发现,可以先导入 fastJson ,如果转换有问题的话,直接调用fastJson 即可看到问题。注意的是,会把null删除。

在此我罗列了几点使用

  1. 前端传输问题
  2. 后端接收数据问题
  3. 回传问题
  4. 如何判断自己哪里错了
    1. dubug查看自己能否在后端接受
    2. 500,可以先用fastJson进行转换,看看转换的数据问题,我就遇到了全为空,
    3. 查看前端回传的XHR

    (以下代码很不全,只需要看核心即可。)

    其实很多500问题,都需要调dubug去做,前端的代码问题很少,一般都是后端的问题

    先写几个注意点

    1. 前端发送设置

       contentType: "application/json; charset=UTF-8",

      这个utf-8 有争议,会出现WARN。这样的get post都能穿,我在这里效果确实实现了,但是继续改进好像吧utf-8去掉就可以了。

    2. 后端使用@Resquest 接受对象或者参数
      public ResultModel  checkLogin(HttpServletRequest request, @RequestBody  User user)
    3. 利用map进行存储时,不能
      Map<String,Object> hashMap=new HashMap<>();

      Object ,这里就要说一个问题。Object是访问不到对象的get等自定义的方法的。

      必须为对象

      Map<String,User> hashMap=new HashMap<>();

      其实这边直接返回也可以了,但是我容易忽略一点,一开始就是回传成功的。是因为我在User上使用了@Data,但是下面DTO没有加。toJsonString 是依赖这些get 方法去获得属性值的。

    4. 使用DTO进行封装

      使用DTO时候,用到了另一个Enum,下面再贴代码好了。

      DTO,保证回传。

    5. 后端返回 如果是String ,其实就是在外面嵌套了一个 “” ,所以有些地方是统一String返回(先用fastJson.toJsonSting(ResultDTO)这是我看到有人是这么写的。。。。似乎也没错),

      还有就是我将@Controller 和@ResponseBody 分开写了,如果愿意的话,@RestController 即可。

    6. 前端接收

      ? success(res)的问题而已,网上很多。

    前端问题和后端接收

    前端的话我用的是Jquery去实现。

    题外对比 那么第一种是 serialize()

<script>
    $('form').submit(function () {
        layer.msg('wocao',{time:2000});
        var username=$("input[name='username']").val();
        if(username==null){
            layer.msg('用户名不能为空!',{time:2000});
            return false;
        }
        var password=$("input[name='password']").val();
        var url=$(this).attr('action');
        var formData=$("#form").serialize();
        $.ajax({
            type: "post",
            url: url,
            dataType: "json",
            data: formData,
            success: function(hashmap){
                if (hashmap.status == 1) {
                    layer.msg(hashmap.message, {time: 1000}, function () {
                        // window.location.href = "/admin/user_list/lists";
                        // layer.msg(.message);
                        window.location.href="/demo/success";

                    });
                } else {
                    //刷新验证码
                    // $(".reloadverify").click();
                    layer.msg(hashmap.message);
                }
            }
        });
        return  false;
    });
</script>

那么接收其实用不到@ResquestBody

 public String checkLogin(HttpServletRequest request,String username,String password){}

直接对应属性接受即可。

json格式发送与接收

 <script>
        $('form').submit(function () {
            layer.msg('wocao',{time:2000});
            var username=$("input[name='username']").val();
            if(username==null){
                layer.msg('用户名不能为空!',{time:2000});
                return false;
            }
            var password=$("input[name='password']").val();
            var url=$(this).attr('action');
            var formData=$("#form").serialize();
            $.ajax({
                type: "post",
                url: url,
                contentType: "application/json; charset=UTF-8",
                dataType: "json",
                data: JSON.stringify({
                    userName: username,
                    password: password
                }),
                success: function(res){
                    if (res.code == "002") {
                        layer.msg(res.msg, {time: 1000}, function () {
                            // window.location.href = "/admin/user_list/lists";
                            // layer.msg(.message);
                            window.location.href="/demo/success";

                        });
                    } else {
                        //刷新验证码
                        // $(".reloadverify").click();
                        layer.msg(res.msg);
                    }
                },error:function(xhr){alert(xhr.responseText)}
            });
            return  false;
        });
    </script>

后端接收利用@ResquestBody

    @ResponseBody//直接返回json 值
    @PostMapping("/checkLogin")
    public ResultModel  checkLogin(HttpServletRequest request, @RequestBody  User user){
        String password= user.getPassword();
        Map<String,User> hashMap=new HashMap<>();
        boolean result=password.equals(userService.getUser(Integer.parseInt(user.getUserName())).getPassword());
        if (result) {
            request.getSession().setAttribute("admin_id",user.getUserName());
//            hashMap.put("status",1);
//            hashMap.put("message","登陆成功");
            hashMap.put("user",user);
//            return JSON.toJSONString(hashMap);
            return (new ResultModel<Map<String ,User>>().setSuccess(hashMap));
//            String res=JSON.toJSONString(hashMap);
//            return res;
        }
        else {

            System.out.println(123);
//            return JSON.toJSONString(new ResultModel<Map<String ,Object >>().setError(null));
            return new ResultModel<Map<String ,Object >>().setError(null);

        }
    }

Springboot No converter found for return value of type: class

这个提示我是从前端回传看到的。。。但是我看不少人从后端看到的

Spring 都自带了jackson,所以一般是get方法没写,建议直接用@Data算了

原文地址:https://www.cnblogs.com/EsMussSeinHui/p/11438815.html

时间: 2024-10-14 13:22:35

json使用小结的相关文章

服务器端-前端json数据传输小结

Java服务端收到前端字符串转json: import com.alibaba.fastjson.JSONObject; String s = "{\"userLoginId\":\"sysman\",\"mobileIds\":\"bdzfzl001,sgbj001\"}"; JSONObject jsonobj = JSON.parseObject(s); System.out.println(json

Golang ---json解析

golang官方为我们提供了标准的json解析库–encoding/json,大部分情况下,使用它已经够用了.不过这个解析包有个很大的问题–性能.它不够快,如果我们开发高性能.高并发的网络服务就无法满足,这时就需要高性能的json解析库,目前性能比较高的有json-iterator和easyjson. 现在我们需要引进一个高性能的json解析库,这里以json-iterator为例,但是我们全部换掉又不放心,所以可以先小范围的测试下,这时候我们就需要两个解析库并存,那么这时候我们如何选择我们需要

Javascript动画效果(四)

Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下滚入的效果,那么那种效果是如何实现的呢? 首先我们我们完成该效果的html和css代码,代码如下: html部分代码: <div id="move"> <a href="#"><i><img src="images/1

Express4 启航指南

确实有感而发,Nodejs真的发展太快了,这么说的原因有两点:自己去年冬天买了本<了不起的Node.js>,里面介绍Express的版本还是2.x.x:前些天小伙伴买了本<Node.js实战>,结果依赖的Express是3.x.x.尼玛如果安装目前新版的Express4,那么这些书中的例子连项目都无法正常跑起来. Nodejs相关的纸版书一上市就已经过时了! 此文的背景是由于俺某天手欠,升级了最新Express V4+后,发现项目不可用了(还好是公司内部的小工具),查找资料后整理了

Json.net3.5 常用使用小结

3.5版本dll下载:http://pan.baidu.com/s/1c0vgNWc using System; using System.Linq; using System.Collections.Generic; namespace microstore { public interface IPerson { string FirstName { get; set; } string LastName { get; set; } DateTime BirthDate { get; set

JSON的使用小结

JSON中存储的是key:value,其实在编程的时候我们会遇到很多都是key:value的形式.比如:map,java对象(一个对象的一个属性只会有一个值),数据库中key:value对应着里面存储的一个数据,redis的本质就是key:value.所以你会发现key:value很有用. 1.将任何形式的内容转换成key:value形式的字符串(观察输出),比如json文件. { "name": "Tom", "age" : 12, "

XML数据 JSON数据 LitJSON 数据 的编写和解析 小结

用XML生成如下数据<?xml version="1.0"encoding="UTF-8"?><Transform name="MyCube" ><Position><X>11</X><Y>89</Y><Z>20</Z></Position></Transform> 操作如下 在C#脚本中 // 创建一个文档XmlD

json小结

JSON的用途 使用基于JavaScript的应用程序,其中包括浏览器扩展和网站 使用JSON格式序列化和结构化的数据传输网络连接 这主要用于服务器和Web应用程序之间的数据传输 Web服务和API采用JSON格式提供公共数据 它可以用来与现代编程语言 JSON的特点 易于读写JSON 轻量级的基于文本的交换格式 独立语言 JSON格式示例: 名称/值对数据表示 大括号持有的对象和每个名称后跟":"(冒号),名称/值对的分离,(逗号) 方括号持有数组和值,(逗号)分隔. 1 { 2 &

combobox远程加载数据的总结和Json数据的小结

1.从后台返回请求加载Combobox下拉框数据 html部分1 <select name="mateBelongZ" id="mateBelongZID" style="width:142px;height:20px;font-size:13px;border:1px solid teal"> 2 </select> js部分 1 $.ajax({ 2 url : rootPath+'/jasframework/ycsy