Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.2.83版本 long类型反序列化位数超出后会无感处理溢出 #4480

Open
arsenalzjx opened this issue Feb 7, 2024 · 0 comments
Open

Comments

@arsenalzjx
Copy link

arsenalzjx commented Feb 7, 2024

版本

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.83</version>
            </dependency>

Debug过程

基础类型long处理在Long.MAX 的长度内都能正确处理反序列化,出现超出大小后报错,但超过长度会静默处理溢出(初步判断是这样的,极少的情况发现会报错,暂时没摸清这里的原因,按照以下我的测试记录可复现),导致接收数据出问题,经测试,包装类型Long,基础类型int,包装类型Integer均无此问题,只有基础类型long存在该现象
image
image

相关代码

测试类

@Data
public class Test implements Serializable {

    private LocalDate localDate;

    private LocalDateTime createTime;

    private Date date;

    private Long longClassType;

    private long longType;

    private Integer integerType;

    private int intType;

    private String str;
}

Controller

@RestController
@RequestMapping("/test")
public class TestController{

    @PostMapping
    public Test queryDate(@RequestBody Test test) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
        return test;
    }

}

FastJsonHttpMessageConverter 注册

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(stringHttpMessageConverter());
        converters.add(fastJsonHttpMessageConverter());
        converters.add(xmlHttpMessageConverter());
        WebMvcConfigurer.super.configureMessageConverters(converters);
    }

    @Bean
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter customFastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
//        ParserConfig parserConfig = new ParserConfig();
//        parserConfig.putDeserializer(Long.class, CustomeLongCodec.instance);
//        parserConfig.putDeserializer(long.class, CustomeLongCodec.instance);
//        parserConfig.putDeserializer(Integer.class, CustomeIntegerCodec.instance);
//        parserConfig.putDeserializer(int.class, CustomeIntegerCodec.instance);
//        fastJsonConfig.setParserConfig(parserConfig);
        fastJsonConfig.setSerializerFeatures(
                //日期格式化
                SerializerFeature.WriteDateUseDateFormat,
                SerializerFeature.DisableCircularReferenceDetect);

        List<MediaType> mediaTypeList = new ArrayList<>();
        mediaTypeList.add(MediaType.APPLICATION_JSON);
        mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
        customFastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypeList);
        customFastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        return customFastJsonHttpMessageConverter;
    }

    @Bean
    public StringHttpMessageConverter stringHttpMessageConverter() {
        StringHttpMessageConverter httpMessageConverter = new StringHttpMessageConverter();
        httpMessageConverter.setDefaultCharset(Charset.defaultCharset());
        return httpMessageConverter;
    }

    @Bean
    public MappingJackson2XmlHttpMessageConverter xmlHttpMessageConverter() {
        MappingJackson2XmlHttpMessageConverter xmlHttpMessageConverter = new MappingJackson2XmlHttpMessageConverter();
        List<MediaType> mediaTypeList = new ArrayList<>();
        mediaTypeList.add(MediaType.TEXT_XML);
        xmlHttpMessageConverter.setSupportedMediaTypes(mediaTypeList);
        return xmlHttpMessageConverter;
    }
}

http请求体数据

{"localDate":"2024-02-01","createTime":"2024-02-01 12:22:22","longClassType": "123","longType":922337203685477580899,"integerType":"123","intType":123}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant