基于@JsonProperty的使用说明

目录
  • 一、背景
  • 二、使用方式
  • 三、注意事项

一、背景

在熟悉代码的过程中,看到了@JsonProperty注解的使用,查了下使用的方法,但是总觉得欠缺了点什么东西,所以自己实践了下这个注解的作用,由于时间原因没有熟悉究竟底层是怎么实现的.

所以这里只是对使用注意事项做下分析,底层实现的话这里先mark下.

二、使用方式

@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别)

这里以springboot的小demo来验证下这个注解的作用

Test.java实体类:

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @date: 2020/8/17
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test {

    @JsonProperty(value = "fake_name", required = true)
    private String fakeName;

    @JsonProperty(value = "fake_old", required = true)
    private Integer fakeOld;

    @Override
    public String toString() {
        return "Test{" +
            "fakeName='" + fakeName + '\'' +
            ", fakeOld=" + fakeOld +
            '}';
    }
}

Test.controller类:

import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.annotation.Resource;
/**
 * @date: 2020/7/30
 */

@Api(tags = "测试接口")
@RestController
public class TestController {
    @ApiOperation(value="测试")
    @PostMapping("/test")
    public SingleResponse<String> getCodesByMenuCode(@RequestBody Test test) {
        Test param = test;
        System.err.println(JSON.toJSONString(param));
        System.err.println(param.toString());
        Test o1 = JSON.parseObject("{\"fakeName\":\"test\",\"fakeOld\":1}", Test.class);
        Test o2 = JSON.parseObject("{\"fake_name\":\"test\",\"fake_old\":1}", Test.class);
        return SingleResponse.buildSuccessRes("success");
    }

}

swagger测试:

可以看到接到了swagger下划线命名的变量

在Json.toJsonString时候打印的是原本属性的名称

两种方式都可以反序列化成Test对象.

交换使用也是可以反序列化成Test对象.

三、注意事项

1  使用JSON.toJsonString的时候实体类需要有getter方法,否则会输出{}

2  @requestBody注解需要在post请求下才能正常使用.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • fastjson转换对象实体@JsonProperty不生效问题及解决

    目录 fastjson转换对象实体@JsonProperty不生效 项目场景 问题描述 原因分析 解决方案 @JsonProperty 失效问题的排查 fastjson转换对象实体@JsonProperty不生效 项目场景 请求第三方应用 返回json数据 问题描述 第三方返回的数据中,存在java关键词,无法直接使用原属性名进行对应 例如(class.interface等)使用@JsonProperty注解不能返回正确的结果 @Data static class User{      @Jso

  • 关于@JsonProperty,@NotNull,@JsonIgnore的具体使用

    目录 前情摘要 场景分析一 场景分析二 场景分析三 场景分析四 前情摘要 上回说道,小明同学用@JsonProperty解决了,在接口通讯中的Json反序列化问题. 经过研究,小明发现@JsonProperty在特定场景下,还有更人性化的作用. 并且在项目中相继使用了@JsonIgnore和@NotNull两兄弟.下面继续场景分析. 场景分析一 小明做了一个web表单,用来填写并保存数据,后台写restful接口接收数据并保存. 写完之后让老大review的时候,自信满满的小明,又收到了很多co

  • 关于@JsonProperty和@JSONField注解的区别及用法

    目录 @JsonProperty和@JSONField注解区别及用法 1. 目的 2. 区别 jsonField和jsonProperty注解的坑 @JSONField @JSONProperty @JsonProperty和@JSONField注解区别及用法 1. 目的 都是为了解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准 2. 区别 1.框架不同: @jsonProperty是 Jackson的包,而@jsonfield是fastjson的包 2.用法不同: (1

  • 基于JQuery 选择器使用说明介绍

    jQuery 元素选择器和属性选择器允许您通过标签名.属性名或内容对 HTML 元素进行选择. jQuery 元素选择器:jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") 选取所有 class="intro" 的 <p> 元素. $("p#demo") 选取 id="demo" 的第一个 <p> 元素

  • 基于ThreadPoolTaskExecutor的使用说明

    目录 ThreadPoolTaskExecutor的使用 springboot 配置 提交任务 ThreadPoolTaskExecutor配置问题 有关spring中ThreadPoolTaskExecutor具体如下 回忆一下线程池工作原理 测试场景1 测试场景2 ThreadPoolTaskExecutor的使用 当我们需要实现并发.异步等操作时,通常都会使用到ThreadPoolTaskExecutor,现对其使用稍作总结. springboot 配置 提交任务 无返回值的任务使用exe

  • 基于Bootstrap的标签页组件及bootstrap-tab使用说明

    bootstrap-tab bootstrap-tab组件是对原生的bootstrap-tab组件的封装,方便开发者更方便地使用,主要包含以下功能: tab页初始化 关闭tab页 新增tab 显示tab页 获取tab页ID 使用 Step1 :引入样式 <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" rel="external nofollow" > <

  • 基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍

    如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="css/bootstrap.css" rel="external nofollow" >

  • 基于Vue2-Calendar改进的日历组件(含中文使用说明)

    一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅-- 于是网上搜了好久找到了Vue2-Calendar,不用说,挺好用的,但是同时也发现这个组件有些问题,有些功能挺不符合我们的要求,于是着手改了一版 二,改进的功能 在Vue2-Calendar v2.2.4 版基础上作了优化. 1.改进原控件无法切换语言的BUG,支持 lang='zh-CN'和'en'. 2.日历面板增加

  • 基于PHP Web开发MVC框架的Smarty使用说明

    一.Smarty简明教程 1.安装演示 下载最新版本的Smarty-3.1.12,然后解压下载的文件.接下来演示Smarty自带的demo例子. (1)下载地址:http://www.smarty.net/download(2)在你的WEB服务器根目录下建立新目录,这里我在/var/www下创建yqting/目录,然后将解压之后的目录中的demo/和libs/目录复制到/var/www/yqting/目录下. (3)这里要特别注意demo/目录下cache/和template_c/两个目录,一定

  • 基于PostgreSQL pg_hba.conf 配置参数的使用说明

    pg_hba.conf 配置详解 该文件位于初始化安装的数据库目录下 编辑 pg_hba.conf 配置文件 postgres@clw-db1:/pgdata/9.6/poc/data> vi pg_hba.conf TYPE 参数设置 TYPE 表示主机类型,值可能为: 若为 `local` 表示是unix-domain的socket连接, 若为 `host` 是TCP/IP socket 若为 `hostssl` 是SSL加密的TCP/IP socket DATABASE 参数设置 DATA

  • 基于redis setIfAbsent的使用说明

    如果为空就set值,并返回1 如果存在(不为空)不进行操作,并返回0 很明显,比get和set要好.因为先判断get,再set的用法,有可能会重复set值. setIfAbsent 和 setnx setIfAbsent 是java中的方法 setnx 是 redis命令中的方法 setnx 例子 redis> SETNX mykey "Hello" (integer) 1 redis> SETNX mykey "World" (integer) 0 r

  • 基于json解析神器 jsonpath的使用说明

    如果项目需求是从某些复杂的json里面取值进行计算,用jsonpath+IK(ik-expression)来处理十分方便,jsonpath用来取json里面的值然后用IK自带的函数进行计算,如果是特殊的计算那就自定义IK方法搞定,配置化很方便. 下面简单介绍下jsonpath的使用方法,主要测试都在JsonPathDemo类里面: 下面是一个简单的java项目demo: 注意: 其中他的max,min,avg,stddev函数只能类似于如下处理: //正确写法 但是感觉很鸡肋 context.r

  • 基于SpringAop中JoinPoint对象的使用说明

    JoinPoint 对象 JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象. 常用api: 方法名 功能 Signature getSignature(); 获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息 Object[] getArgs(); 获取传入目标方法的参数对象 Object getTarget(); 获取被代理的对象 Object getTh

随机推荐