当前位置: 首页 > news >正文

考研培训机构排名金华网站建设优化技术

考研培训机构排名,金华网站建设优化技术,邢台物流网站建设,南宁手机平台网站1,问题场景 后端返回的Long类型的数据,超10000000000000000,前端处理的时候,数据被截断了。比如tchId: 11073477511443988481, 前端根据tchId获取下一环节信息的时候,传的tchId变成了11073477511443988400&…

1,问题场景

         后端返回的Long类型的数据,超10000000000000000,前端处理的时候,数据被截断了。比如tchId: 11073477511443988481, 前端根据tchId获取下一环节信息的时候,传的tchId变成了11073477511443988400,导致报错。

    主要是因为JavaScript中的Number类型无法精确表示超过其安全整数范围(即-9007199254740991(-2^53 + 1)到9007199254740991(2^53 - 1))的整数值。因此,当后端Java的Long类型数据超过这个范围时,前端JavaScript在解析这些数据时就会丢失精度。

        因此当Long类型超过的时候,需要把Long类型,转成字符串返回给前端。

2,处理:

1,处理方法1:字段加注解

        可以使用Jackson库的@JsonFormat注解来将Long类型字段序列化为字符串类型。这样,在数据传输到前端时,就会以字符串的形式进行传输,从而避免了精度丢失的问题,如代码字段返回转换成字符串。

import com.fasterxml.jackson.annotation.JsonFormat;public class Tache {@JsonFormat(shape = JsonFormat.Shape.STRING)private Long tchld;
}

这种就只适合指定的字段,不通用。如果要设置未全局要怎么做?

2,处理方法2:全局处理

        为了更加便捷地解决这个问题,使用全局配置,将所有Long类型的数据都转换为字符串类型。通过配置Jackson的ObjectMapper来实现

引用:

implementation 'com.fasterxml.jackson.core:jackson-core:2.13.5'

判断处理:
public class StringSerializer extends StdSerializer<Object> {private static Logger logger = LoggerFactory.getLogger(StringSerializer.class);public final static StringSerializer instance = new StringSerializer();public StringSerializer() {super(Object.class);}public StringSerializer(Class<?> handledType) {super(handledType, false);}@Overridepublic void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {if (value != null && value instanceof Long) {if (((Long) value).longValue() >= 10000000000000000L) {gen.writeString(value.toString());} else {gen.writeNumber((Long) value);}}}
}

配置:
@Configuration
@EnableWebMvc
public class WebMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}@Beanpublic ObjectMapper jacksonObjectMapperCustomization() {TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().timeZone(timeZone);return builder.build();}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.removeIf(c -> c instanceof MappingJackson2HttpMessageConverter);MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(jacksonObjectMapperCustomization());ObjectMapper objectMapper = new ObjectMapper();SimpleModule simpleModule = new SimpleModule();simpleModule.addSerializer(Long.class, StringSerializer.instance);simpleModule.addSerializer(Long.TYPE, StringSerializer.instance);objectMapper.registerModule(simpleModule);objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);jackson2HttpMessageConverter.setObjectMapper(objectMapper);converters.add(jackson2HttpMessageConverter);converters.add(new ByteArrayHttpMessageConverter());converters.add(new FormHttpMessageConverter());converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));}@Beanpublic LocaleChangeInterceptor localeChangeInterceptor() {LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();localeChangeInterceptor.setParamName("LOCALE");return localeChangeInterceptor;}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(localeChangeInterceptor());}@Beanprotected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {return new RequestMappingHandlerMapping() {@Overrideprotected boolean isHandler(Class<?> beanType) {return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class)|| (AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class)&& !AnnotatedElementUtils.hasAnnotation(beanType, FeignClient.class)));}};}@Beanpublic WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();allEndpoints.addAll(webEndpoints);allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());String basePath = webEndpointProperties.getBasePath();EndpointMapping endpointMapping = new EndpointMapping(basePath);boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);}private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));}
}

处理的代码:

simpleModule.addSerializer(Long.class, StringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, StringSerializer.instance);

总结:

        如果是只有某些指定数据进行转换,就直接加注解的方式,要全局的话,就用全局的配置去处理。

http://www.dtcms.com/a/619479.html

相关文章:

  • 东莞网站建设推广平台表格制作
  • 网站建设与制作区别网站 后台 模板
  • 50022_基于微信小程序同城维修系统
  • 新网做网站怎么上传wordpress 用户名
  • 简历空窗期被追问。。。
  • 网站平台免费网站建设设计基础
  • Java算法题解析(2)
  • 408计算机考研操作系统操作系统的基本概念
  • 本地wordpress怎么上传网站公司seo
  • 中企动力做网站贵吗辽宁网络推广公司
  • 网站建设规范自建设网站
  • 建设银行手机银行登录网站鄞州区网站建设报价
  • 最大连续子序列和2(浙大2005研究生复试上机考试题)
  • 网站首页模块建设什么是网站开发公司电话
  • 选择HttpHandler还是HttpModule?
  • 慈溪市规划建设网站创新的企业网站开发
  • 公司企业网站模板最好的活动策划公司
  • 自己做网站广告无锡建设局官方网站
  • 深圳市建设行业门户网站电子商务基础平台有哪些
  • 精湛的网站建设国外产品设计网
  • 万云网络网站网站做中英版
  • 网站运营推广怎做vs做网站如何调试
  • 淄博网站制作服务wordpress 菜单 链接地址
  • BT Navigator:插件化架构与执行逻辑深度大概表达我的思路
  • 盐城滨海建设局网站免费网站在哪里申请
  • 淘客的手机网站怎么做建设实木餐桌椅移动网站
  • 关于插画的网站网络广告联盟
  • 网站制作全包价格织梦的网站关键词
  • 网站后台是怎样制作电白手机网站建设公司
  • 淘客做网站多少钱怎么建设收费网站