You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson 2.16.0中如何调整JSON字符串最大长度限制?

问题描述

我把28MB的CSV数据转成Base64编码字符串后放入JSON请求体,请求体格式如下:

{
   "csvData" : "ReallyLargeBase64EncodedString"
}

发送请求后触发了如下异常:

JSON parse error: String value length (20051112) exceeds the maximum allowed (20000000, from `StreamReadConstraints.getMaxStringLength()`); nested exception is com.fasterxml.jackson.databind.JsonMappingException: String value length (20051112) exceeds the maximum allowed (20000000, from `StreamReadConstraints.getMaxStringLength()`)

当前使用的Jackson core版本是2.16.0,请问能否把默认的20000000长度限制调整为自定义值?

解决方案

完全可以调整这个限制,根据你的运行环境,有两种配置方式:

1. Spring Boot 环境

配置文件方式

直接在application.properties中添加配置:

spring.jackson.parser.max-string-length=50000000

或者用application.yml格式:

spring:
  jackson:
    parser:
      max-string-length: 50000000

这里设置的50000000足够容纳28MB CSV转Base64后的字符串(Base64编码后体积约为原数据的1.33倍,28MB转后约37MB,对应字符串长度约38,016,000)。

代码自定义配置

如果需要更灵活的配置,可以创建自定义配置类:

import com.fasterxml.jackson.core.StreamReadConstraints;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonCustomConfig {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonStreamReadConstraintsCustomizer() {
        return builder -> {
            StreamReadConstraints constraints = StreamReadConstraints.builder()
                    .maxStringLength(50000000) // 设置你需要的最大字符串长度
                    .build();
            builder.streamReadConstraints(constraints);
        };
    }
}

2. 纯Jackson 环境(非Spring Boot)

如果是直接使用Jackson的ObjectMapper,可以通过JsonMapper构建器配置:

import com.fasterxml.jackson.core.StreamReadConstraints;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonConfig {
    public static ObjectMapper getCustomObjectMapper() {
        StreamReadConstraints constraints = StreamReadConstraints.builder()
                .maxStringLength(50000000)
                .build();
        return JsonMapper.builder()
                .streamReadConstraints(constraints)
                .build();
    }
}

补充说明

StreamReadConstraints是Jackson 2.15版本引入的新特性,专门用于配置JSON流读取时的各种限制(包括字符串最大长度、嵌套深度、数字大小等),你的2.16.0版本完全支持该配置方式。

内容的提问来源于stack exchange,提问作者Varun Kancharla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:07:42