当前位置:网站首页>接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
2022-07-06 22:37:00 【郝开】
接口间调用为什么要用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 {
/** * json报文与@JSONField一致 */
//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;
/** * json报文传与@JSONField的驼峰转换 */
@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;
}
/** * 为什么用requestJson接?我不想和你的bane属性叫的一样,一样了我也不想改,怎么办? * @param requestJson * @return */
@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测试
边栏推荐
- Wechat can play the trumpet. Pinduoduo was found guilty of infringement. The shipment of byte VR equipment ranks second in the world. Today, more big news is here
- Advertising attribution: how to measure the value of buying volume?
- What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
- What is Web3
- Introduction to namespace Basics
- How to design API interface and realize unified format return?
- STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
- 谈谈讲清楚这件事的重要性
- acwing 843. n-皇后问题
- leetcode 53. Maximum Subarray 最大子数组和(中等)
猜你喜欢
01机器学习相关规定
程序员上班摸鱼,这么玩才高端!
U++ 元数据说明符 学习笔记
当 Knative 遇见 WebAssembly
【愚公系列】2022年7月 Go教学课程 005-变量
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
A detailed explanation of head pose estimation [collect good articles]
【Android Kotlin协程】利用CoroutineContext实现网络请求失败后重试逻辑
JDBC link Oracle reference code
Meow, come, come: do you really know if, if else
随机推荐
Web3 社区中使用的术语
Talk about the importance of making it clear
谈谈讲清楚这件事的重要性
Lecture 3 of "prime mover x cloud native positive sounding, cost reduction and efficiency enhancement lecture" - kubernetes cluster utilization improvement practice
【实践出真理】import和require的引入方式真的和网上说的一样吗
Acl2022 | decomposed meta learning small sample named entity recognition
National meteorological data / rainfall distribution data / solar radiation data /npp net primary productivity data / vegetation coverage data
What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
JS input and output
In depth analysis of kubebuilder
【Android Kotlin协程】利用CoroutineContext实现网络请求失败后重试逻辑
Flask项目使用flask-socketio异常:TypeError: function() argument 1 must be code, not str
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
【数模】Matlab allcycles()函数的源代码(2021a之前版本没有)
Comparison between thread and runnable in creating threads
JS variable plus
【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
Structure actual training camp | after class homework | module 6
Chapter 9 Yunji datacanvas was rated as 36 krypton "the hard core technology enterprise most concerned by investors"