Commit 44089542 authored by liaozan's avatar liaozan 🏀

Serialize Long using string if exceeds the front-end maximum

parent ec0597f1
package com.schbrain.common.web;
import com.schbrain.common.web.support.LongToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
/**
* @author liaozan
* @since 2023/8/9
*/
@ConditionalOnClass(Jackson2ObjectMapperBuilder.class)
public class ObjectMapperConfiguration {
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return builder -> builder.serializerByType(Long.class, LongToStringSerializer.instance);
}
}
...@@ -29,7 +29,8 @@ import java.util.List; ...@@ -29,7 +29,8 @@ import java.util.List;
AuthenticationConfiguration.class, AuthenticationConfiguration.class,
ExceptionHandingConfiguration.class, ExceptionHandingConfiguration.class,
ServletComponentConfiguration.class, ServletComponentConfiguration.class,
CorsFilterConfiguration.class CorsFilterConfiguration.class,
ObjectMapperConfiguration.class
}) })
public class WebCommonAutoConfiguration { public class WebCommonAutoConfiguration {
......
package com.schbrain.common.web.support;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
/**
* @author liaozan
* @since 2023/8/9
*/
public class LongToStringSerializer extends StdSerializer<Long> {
public static final LongToStringSerializer instance = new LongToStringSerializer();
private static final double FRONT_MAX_VALUE = Math.pow(2, 53);
private static final long serialVersionUID = -1872783127429540811L;
protected LongToStringSerializer() {
super(Long.class);
}
@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (value.doubleValue() > FRONT_MAX_VALUE) {
gen.writeString(value.toString());
} else {
gen.writeNumber(value);
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment