基于@JsonProperty的使用說(shuō)明
一、背景
在熟悉代碼的過(guò)程中,看到了@JsonProperty注解的使用,查了下使用的方法,但是總覺(jué)得欠缺了點(diǎn)什么東西,所以自己實(shí)踐了下這個(gè)注解的作用,由于時(shí)間原因沒(méi)有熟悉究竟底層是怎么實(shí)現(xiàn)的.
所以這里只是對(duì)使用和注意事項(xiàng)做下分析,底層實(shí)現(xiàn)的話(huà)這里先mark下.
二、使用方式
@JsonProperty注解主要用于實(shí)體類(lèi)的屬性上,作用可以簡(jiǎn)單的理解為在反序列化的時(shí)候給屬性重命名(多一個(gè)名字來(lái)識(shí)別)
這里以springboot的小demo來(lái)驗(yàn)證下這個(gè)注解的作用
Test.java實(shí)體類(lèi):
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類(lèi):
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 = "測(cè)試接口")
@RestController
public class TestController {
@ApiOperation(value="測(cè)試")
@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測(cè)試:

可以看到接到了swagger下劃線(xiàn)命名的變量

在Json.toJsonString時(shí)候打印的是原本屬性的名稱(chēng)

兩種方式都可以反序列化成Test對(duì)象.

交換使用也是可以反序列化成Test對(duì)象.

三、注意事項(xiàng)
1 使用JSON.toJsonString的時(shí)候?qū)嶓w類(lèi)需要有g(shù)etter方法,否則會(huì)輸出{}
2 @requestBody注解需要在post請(qǐng)求下才能正常使用.
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)百度坐標(biāo)的摩卡托坐標(biāo)與火星坐標(biāo)轉(zhuǎn)換的示例
這篇文章主要介紹了java實(shí)現(xiàn)百度坐標(biāo)的摩卡托坐標(biāo)與火星坐標(biāo)轉(zhuǎn)換的示例,需要的朋友可以參考下2014-03-03
在SpringBoot中利用RocketMQ實(shí)現(xiàn)批量消息消費(fèi)功能
RocketMQ 是一款分布式消息隊(duì)列,支持高吞吐、低延遲的消息傳遞,對(duì)于需要一次處理多條消息的場(chǎng)景,RocketMQ 提供了批量消費(fèi)的機(jī)制,這篇文章將展示如何在 Spring Boot 中實(shí)現(xiàn)這一功能,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-11-11
javax.validation自定義日期范圍校驗(yàn)注解操作
這篇文章主要介紹了javax.validation自定義日期范圍校驗(yàn)注解操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
java線(xiàn)程并發(fā)blockingqueue類(lèi)使用示例
BlockingQueue是一種特殊的Queue,若BlockingQueue是空的,從BlockingQueue取東西的操作將會(huì)被阻斷進(jìn)入等待狀態(tài)直到BlocingkQueue進(jìn)了新貨才會(huì)被喚醒,下面是用BlockingQueue來(lái)實(shí)現(xiàn)Producer和Consumer的例子2014-01-01
SpringBoot+Druid開(kāi)啟監(jiān)控頁(yè)面的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot+Druid開(kāi)啟監(jiān)控頁(yè)面的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
Java 互相關(guān)聯(lián)的實(shí)體無(wú)限遞歸問(wèn)題的解決
這篇文章主要介紹了Java 互相關(guān)聯(lián)的實(shí)體無(wú)限遞歸問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10

