由于前后端传值时想要忽略某些字段,不同的注解用法和作用也不同
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
属性 | 描述 |
---|---|
Access.AUTO | 冗余参数,可以不用写 |
Access.READ_ONLY | 仅做序列化(后端给前端传值 )忽略属性 |
Access.WRITE_ONLY | 仅做反序列化(前端给后端传值 )忽略属性 |
Access.READ_WRITE | 正反序列化都忽略字段 |
@JsonIgnore
使用这个注解会导致一个问题,就是无法接受前端的请求参数
。因为他在序列化(后端给前端传值
)和反序列化(前端给后端传值
)都会起作用,这就导致发送的请求我们想接受参数但接受不到
解决方案:
更换form表单(data-form)传参可以解决这个问题
@JSONField(serialize = false)
使用这个注解可能会失效,原因是Sprintboot默认是通过jackson
来转换JSON的,@JSONField(serialize = false)是FastJson
的注解,Springboot使用jackson
进行转JSON的时候并不会扫描这个注解。
解决方案:
在Springboot启动类中添加如下配置
@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);
}
在Bean里用transient修饰变量
@JSONField(serialize = false)
private transient String age;