在實習中遇到了一個不尋常的事情,今天和同事討論一個小問題,同事使用swagger,想要調(diào)用一個接口,這個接口要傳遞一個json對象,對應(yīng)java的一個實體類,但是有一個屬性同事不想看到它,就用@JsonIgnore給注掉了(當時這個我不知道,??),問題出現(xiàn)的場景是在調(diào)用另一個接口的時候,impl類里需要查詢該字段,并向這個類傳遞這個屬性。他從數(shù)據(jù)庫中查詢到數(shù)據(jù)后設(shè)置給了這個屬性,最后調(diào)用json就是看不到這個屬性。
開始看的時候我也懵了,調(diào)試都有數(shù)據(jù),最終發(fā)現(xiàn)了是該屬性加上了@JsonIgnore注解。正好向我想起之前一篇文章的另一個注解@JSONField。好奇心驅(qū)使我在swager中做了對比。
其實這個問題很簡單的,只用在@ApiModelProperty注解中加上hidden = true就可以了(默認為false)。
這個問題解決。但是我是一個愛思考的人。他用的是@JSONField注解,而我之前沒有用過這個注解,我決定是嘗試使用一下。
一個簡單的場景
實體類
@ApiModel
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AA {
@ApiModelProperty(name = "name")
Integer id;
@ApiModelProperty(name = "name")
String name;
@ApiModelProperty(name = "my_id")
int my_id;
List<String> list;
}
controller
@RestController
@RequestMapping("/admin/acl/index")
public class IndexController {
@GetMapping("/test")
public AA test() {
AA aa = new AA();
aa.setId(0);
aa.setName("");
aa.setMy_id(0);
ArrayList<String> list = new ArrayList<>();
list.add("張三");
list.add("李四");
list.add("王五");
aa.setList(list);
return aa;
}
}
所有測試針對list屬性
1.list什么注解不加
swagger
?
?
postman
swagger竟然默認給到list一些信息。
postman也正常返回,畢竟什么也沒加
2.只給list加上@JsonIgnore
查看結(jié)果
swagger
?
postman
swagger中沒有l(wèi)ist字段
postman中沒有l(wèi)ist字段
加上@JsonIgnore注解后,list字段就像消失了一樣,沒人知道它是否存在。
我之前用的是@JSONField,我不僅是測試還是復(fù)習,觀察一下結(jié)果。
3.只給list加上@JSONField(name = "my_list")
?swagger
?
?
?
postman
這個name屬性怎么沒有起作用?是swagger太強勢了?
4.只給list加上@JSONField(serialize = false)
swagger
?
?
?
postman
這swagger這么強勢嗎?我的@JSONField直接失效,不序列化失效了。
不是swagger太強勢,而是@JSONField就沒有起作用,這個注解是fastjson的注解。
springboot中默認的json解析器是Jackson。如果不指定要用的json解析器,就會使用默認的。所以我們要想讓它起作用就要指定fastjson為我們的默認json解析器。
這次測試忘記了這個知識點(看來我還待練)
在配置類加上下面代碼即可
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
return new HttpMessageConverters(converter);
}
查看效果
5.配置后只給list加上@JSONField(name = "my_list")
swagger
?
?
postman
?
swagger中的list沒有使用別名
postman中使用了別名,并格式化了了json數(shù)據(jù)
6.配置后只給list加上@JSONField(serialize = false)
swagger
?
?
postman
?
swagger還是會有l(wèi)ist字段
postman中已經(jīng)接受不到這個字段了
總結(jié):
1.不想在swagger文檔中顯示字段但傳遞是有這個字段就使用@ApiModelProperty(hidden = true)
2.不想在swagger文檔中顯示字段而且不想讓字段在返回結(jié)果中使用@JsonIgnore(如果只使用一個注解)文章來源:http://www.zghlxwxcb.cn/news/detail-602441.html
3.想在swagger文檔中顯示字段而且不想讓字段在返回結(jié)果中使用@JSONField(serialize = false)(如果只想使用這一個注解,暫時想不到有這樣的場景,手動狗頭)文章來源地址http://www.zghlxwxcb.cn/news/detail-602441.html
到了這里,關(guān)于swagger對json數(shù)據(jù)的處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!