公司网站开发费分录是,抖音seo什么意思,企业网站建设到底应该注意什么,中国建设信息化官网今天使用分页时#xff0c;发现前端页面#xff0c;无法正确显示页号#xff0c;经过debug发现#xff0c;是传送回前端的Long类型的总记录数被全局的消息转换器转换成了 String 类型,导致出现了bug#xff0c;本来将 Long 转成String是为了防止前端精度丢失问题#xff…今天使用分页时发现前端页面无法正确显示页号经过debug发现是传送回前端的Long类型的总记录数被全局的消息转换器转换成了 String 类型,导致出现了bug本来将 Long 转成String是为了防止前端精度丢失问题但是分页查询传回前端的 totalRows 总记录数并没有必要进行转换的必要如何忽略是个问题。
定义的消息转换器 Bean
/*** 统一定义Long序列化转String设置(所有的Long序列化成String)* return*/
Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){//构建http信息转换对象MappingJackson2HttpMessageConverter converter new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper new ObjectMapper();//反序列化忽略未知属性不会抛出异常objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);SimpleModule simpleModule new SimpleModule();//Long | long 序列化StringsimpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);//注册转化器objectMapper.registerModule(simpleModule);//设置序列化实现converter.setObjectMapper(objectMapper);return converter;
}该函数的功能是创建并配置一个MappingJackson2HttpMessageConverter对象用于将Java对象转换为HTTP消息体。主要配置包括
创建MappingJackson2HttpMessageConverter实例。创建ObjectMapper实例并配置反序列化时忽略未知属性。创建SimpleModule实例并注册Long类型和long类型的序列化转换器使其在序列化时转换为String类型。将上述ObjectMapper实例注册到MappingJackson2HttpMessageConverter中。返回配置好的MappingJackson2HttpMessageConverter实例。
第一个想法
通过创建自定义的混合类Mix-in来实现对特定字段的序列化控制。
// 创建一个mix-in类
abstract class MyClassMixIn {JsonSerialize(using LongSerializer.class)public abstract long getMyLong();
}// 然后在 ObjectMapper 配置中注册 mix-in 类
objectMapper.addMixIn(PageResult.class, MyClassMixIn.class);请注意这里假设存在一个默认处理Long类型的 LongSerializer实际上Jackson并没有这样的内置序列化器上述示例仅用于说明如何局部覆盖全局配置。实际应用中可能需要你自己定义一个序列化器或选择其他适当的方式。
第二个想法
让其不会被全局配置影响将使用默认的Long序列化方式失败前端报错500后端控制台没输出报错
ApiModel(description 分页工具类)
Data
public class PageResultT implements Serializable {/*** 总记录数*/ApiModelProperty(value 总记录数, position 1)JsonSerialize(using JsonSerializer.None.class)private Long totalRows;
}想法3
字段忽略序列化(失败传回前段的响应体中totalRows字段直接消失了)
/*** 分页工具类*/
ApiModel(description 分页工具类)
Data
JsonIgnoreProperties({totalRows})
public class PageResultT implements Serializable {/*** 总记录数*/ApiModelProperty(value 总记录数, position 1)private Long totalRows;
}第四种方法自定义序列化方式成功前端成功收到Long类型的数据
public class DefaultLongSerializer extends JsonSerializerLong {Overridepublic void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeNumber(value);}
}
// 在你的类中使用自定义序列化器
ApiModel(description 分页工具类)
Data
public class PageResultT implements Serializable {/*** 总记录数*/ApiModelProperty(value 总记录数, position 1)// 这个字段将按照默认方式序列化LongJsonSerialize(using DefaultLongSerializer.class)private Long totalRows;
}如果全局设置已经将所有Long转为String而你只想让某个字段保持原样那么可能需要在序列化该特定对象时临时更改或覆盖ObjectMapper的配置或者在处理该特定字段时采用其他方法而不是直接通过注解的方式。这通常会涉及到更复杂的逻辑和代码组织结构。