摘要:問題描述開發(fā)通用評論功能時(shí),建立評論實(shí)體。調(diào)試開啟找模式,我們看我們測試請求的字符串是沒問題,屬性齊全。所以造成了綁定時(shí)標(biāo)注的屬性為的結(jié)果。在序列化與反序列化時(shí)都生效一知半解,害己誤人。
問題描述 Comment
開發(fā)通用評論功能時(shí),建立評論實(shí)體。
/** * @author zhangxishuo on 2018/8/19 * 評論實(shí)體 */ @Entity @ApiModel(value = "Comment (評論)", description = "評論實(shí)體") public class Comment extends YunZhiAbstractEntity { private static final Map> serviceMap = new HashMap<>(); static { serviceMap.put("NonMandatoryInstrumentCheckApplyService", NonMandatoryInstrumentCheckApplyService.class); } @Column(length = 3000) private String content; @Transient // 該字段不映射到數(shù)據(jù)庫 @JsonIgnore // 序列化時(shí)忽略屬性 private String serviceName; @Transient // 該字段不映射到數(shù)據(jù)庫 @JsonIgnore // 序列化時(shí)忽略屬性 private Long relationId; }
這里因?yàn)榭紤]到需要將信息傳遞給相關(guān)聯(lián)該評論的實(shí)體,所以建了兩個(gè)額外的屬性serviceName和relationId,但是這個(gè)僅在Service中使用,并不映射到數(shù)據(jù)庫,同時(shí)也不希望這個(gè)字段映射到前臺是也顯示。
測試代碼@Test public void saveTest() throws Exception { logger.debug("測試數(shù)據(jù)"); NonMandatoryInstrumentCheckApply nonMandatoryInstrumentCheckApply = nonMandatoryInstrumentCheckApplyService.getOneSavedObject(); Long relationId = nonMandatoryInstrumentCheckApply.getId(); String content = "測試評論"; String serviceName = "NonMandatoryInstrumentCheckApplyService"; logger.debug("生成評論"); Comment comment = new Comment(); comment.setRelationId(relationId); comment.setContent(content); comment.setServiceName(serviceName); String json = JSONObject.toJSONString(comment); this.mockMvc .perform(MockMvcRequestBuilders.post("/Comment") .content(json) .contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(document("Comment_save", preprocessResponse(prettyPrint()))) .andExpect(MockMvcResultMatchers.status().isOk()); }
看著好像沒什么問題,但是執(zhí)行時(shí)發(fā)生了錯(cuò)誤,Required type must not be null。
logger.debug("獲取服務(wù)Bean"); String serviceName = comment.getServiceName(); Class> className = Comment.getServiceMap().get(serviceName); Object service = ContextConfig.getContext().getBean(className);
在調(diào)用getBean(Class
開啟找Bug模式,我們看我們測試請求的字符串json是沒問題,屬性齊全。
走到控制器時(shí),這兩個(gè)屬性就沒了。結(jié)論:Json反序列化時(shí)出錯(cuò)。
JsonIgnore原因就在@JsonIgnore上,我只考慮了后臺的對象序列化到前臺時(shí)需要忽略該屬性,從而添加了這個(gè)注解。
但是這個(gè)注解是在序列化與反序列化時(shí)都生效的,也就是說:序列化時(shí),忽略該屬性;反序列化時(shí),也忽略該屬性。所以造成了綁定時(shí)@JsonIgnore標(biāo)注的屬性為null的結(jié)果。
解決去掉@JsonIgnore注解,一切正常。
總結(jié)記得第一次見到@JsonIgnore注解時(shí)去網(wǎng)上查這個(gè)注解時(shí)干什么的。
谷歌第一條。然后,沒有認(rèn)真看,一直以為是JsonIgnore只在對象序列化為json是才起作用。導(dǎo)致了誤用。
JsonIgnore在序列化與反序列化時(shí)都生效!
一知半解,害己誤人。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76785.html
摘要:回調(diào)在請求成功或失敗都會觸發(fā)。為避免多次執(zhí)行,請先做事件解綁再重新綁定。避免響應(yīng)多次執(zhí)行錯(cuò)誤使用指示符坑人指數(shù)指示符存在于一定的上下文中的,當(dāng)上下文變化時(shí)指向不同的對象。 1 亂用選擇器 坑人指數(shù):200 JQuery選擇器調(diào)用代價(jià)很大,反復(fù)調(diào)用效率更低。應(yīng)采用緩存對象的方法或采用鏈?zhǔn)秸{(diào)用的方式。 //錯(cuò)誤的寫法 $(#button).click(function(){ $(#...
摘要:你的線上代碼真的沒有嗎歡迎免費(fèi)使用我們可以幫助您第一時(shí)間發(fā)現(xiàn)字符串拼接加法仔細(xì)查看生成的代碼,你會發(fā)現(xiàn)出現(xiàn)在標(biāo)記的后面,然而標(biāo)簽不見了。在中,根據(jù)左右兩邊變量的類型的不同,符號可以用于數(shù)字相加或則字符串拼接。然后又轉(zhuǎn)換為字符串拼接起來。 譯者按: bug雖小,卻是個(gè)磨人的小妖精! 原文: Fixing a bug: when concatenated strings turn int...
摘要:關(guān)聯(lián)關(guān)系的關(guān)聯(lián)關(guān)系定義上,感覺并不是很靈活,姿勢也比較難找。如,定義在關(guān)聯(lián)關(guān)系上的參數(shù)可以設(shè)置級聯(lián)的相關(guān)東西。因?yàn)樾蛄谢瘯婕暗綄?shí)體類關(guān)聯(lián)對象的獲取,會觸發(fā)所有的關(guān)聯(lián)關(guān)系。 接(4) - Database 系列. Java Persistence API,可以理解就是 Java 一個(gè)持久化標(biāo)準(zhǔn)或規(guī)范,Spring Data JPA 是對它的實(shí)現(xiàn)。并且提供多個(gè) JPA 廠商適配,如 Hi...
摘要:在項(xiàng)目中返回?cái)?shù)據(jù)是常見的交互形式,在中這一切都變得十分簡單。返回?cái)?shù)據(jù)格式定義定義返回方式在類上面用定義或者在方法上面用定義,表明是在區(qū)域輸出數(shù)據(jù)。返回?cái)?shù)據(jù)棧長正在拼命寫作中,過兩天我的公眾號會第一時(shí)間分享。 在 WEB 項(xiàng)目中返回 JSON 數(shù)據(jù)是常見的交互形式,在 Spring Boot 中這一切都變得十分簡單。So easy!!! 你所需具備的基礎(chǔ) 什么是 Spring Boot...
摘要:總結(jié)允許的緩存寫場景大部分情況,修改成本會高于增加一次,因此應(yīng)該淘汰緩存如果還在糾結(jié),總是淘汰緩存,問題也不大先操作數(shù)據(jù)庫,還是先操作緩存這里分了兩種觀點(diǎn),的觀點(diǎn)沈老師的觀點(diǎn)。這里我覺得沈老師可能忽略了并發(fā)的問題,比如說以下情況一個(gè)寫請求 緩存誤用 緩存,是互聯(lián)網(wǎng)分層架構(gòu)中,非常重要的一個(gè)部分,通常用它來降低數(shù)據(jù)庫壓力,提升系統(tǒng)整體性能,縮短訪問時(shí)間。 有架構(gòu)師說緩存是萬金油,哪里有問...
閱讀 1306·2021-11-24 09:39
閱讀 2687·2021-09-30 09:47
閱讀 1339·2021-09-22 15:15
閱讀 2433·2021-09-10 10:51
閱讀 1976·2019-08-30 15:55
閱讀 2987·2019-08-30 11:06
閱讀 906·2019-08-30 10:53
閱讀 848·2019-08-29 17:26