栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

接口间调用为什么要用json、fastjson怎么赋值的、fastjson 1.2.83@JSONField映射关系问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

接口间调用为什么要用json、fastjson怎么赋值的、fastjson 1.2.83@JSONField映射关系问题

接口间调用为什么要用json?

应用之间交互,不像前后台之间交互,那么方便可以定义命名一致,因为正常开发中,可能是多个团队编写的接口去互相访问,因此开发过程接收方和发送方传递的参数命名可能不完全一致,所以,你单纯的定义一个对象去接收,如果命名不一致,你就会得不到值。

如果在联调时才发现这种情况,再去改字段,可能涉及多个文件的依赖关系,改起来很麻烦。

因此接口见交互使用json来接收数据。

fastjson怎么赋值的?

通过@JSONField,可以使接口报文的字段映射到@JSONField name指定的字段。

然后再去通过set方法去赋值给你对应的java bean属性,所以这也是为什么需要你提供对应java bean的set方法,且是public的原因。

fastjson最新版本1.2.83报文与@JSONField映射关系问题

1.2.83结果表格(1.2.70都正常取值)

报文@JSONField转换结果
“appId”:“app_id”,@JSONField(name = “app_id”)取值为null
“app_id2”:“app_id2”@JSONField(name = “appId2”)正常取值
“op_id”:“op_id”,//bean关系①:驼峰接收
@JSONField(name = “op_id”)
private String opId;
正常取值
“op_id1”:“op_id1”,//bean关系②:原值接收
@JSONField(name = “op_id1”)
private String op_id1;
正常取值
“op_id2”:“op_id2”,//bean关系③:它值接收
@JSONField(name = “op_id2”)
private String param;
正常取值

Json报文

{
    "op_id":"op_id",
    "op_id1":"op_id1",
    "op_id2":"op_id2",
    "appId":"app_id",
    "app_id2":"app_id2"
}

Bean

@Data
public class Json1 {

    
    //bean关系①:驼峰接收
    @JSONField(name = "op_id")
    private String opId;
    //bean关系②:原值接收
    @JSONField(name = "op_id1")
    private String op_id1;
    //bean关系③:它值接收
    @JSONField(name = "op_id2")
    private String param;

    
    @JSONField(name = "app_id")
    private String app_id;
    @JSONField(name = "appId2")
    private String appId2;
}

Controller

package com.example.helloworld.controller;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello ==== " + 222;
    }

    @RequestMapping(value = "/json1", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Json1 json1(@RequestBody Json1 json) {
        System.out.println(json);
        return json;
    }

    
    @RequestMapping(value = "/json2", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Json1 json1(@RequestBody String requestJson) {
        System.out.println("request json:" + requestJson);
        Json1 json1 = JSON.parseObject(requestJson, Json1.class);
        System.out.println(json1);
        return json1;
    }
}

输出结果

1.2.70

request json:{
    "op_id":"op_id",
    "op_id1":"op_id1",
    "op_id2":"op_id2",
    "appId":"app_id",
    "app_id2":"app_id2"
}
Json1(opId=op_id, op_id1=op_id1, param=op_id2, app_id=app_id, appId2=app_id2)

1.2.83

request json:{
    "op_id":"op_id",
    "op_id1":"op_id1",
    "op_id2":"op_id2",
    "appId":"app_id",
    "app_id2":"app_id2"
}
Json1(opId=op_id, op_id1=op_id1, param=op_id2, app_id=null, appId2=app_id2)
postman设置传输json测试


源码地址:https://gitlab.com/publicstudy/helloworld

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005850.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号