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

Spring Boot REST API无需@EnableWebMvc实现Long转String方案咨询

解决Java Long转String(不使用@EnableWebMvc)

你的配置未生效的核心原因是:直接通过configureMessageConverters添加自定义转换器,没有覆盖或修改Spring Boot默认的Jackson消息转换器,且自定义的ObjectMapper未复用容器中已配置的实例,导致序列化规则未被全局应用。以下是两种可行的解决方案:

方案一:修改现有Jackson转换器(推荐)

通过extendMessageConverters方法,在Spring Boot默认的转换器基础上修改,而非替换整个转换器列表:

package com.dolphin.soa.post.config;

import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebConvertConfig implements WebMvcConfigurer {

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 遍历找到默认的Jackson转换器,修改其ObjectMapper
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter;
                SimpleModule simpleModule = new SimpleModule();
                // 注册Long类型的字符串序列化器
                simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
                simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
                jacksonConverter.getObjectMapper().registerModule(simpleModule);
                break;
            }
        }
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

方案二:全局定制ObjectMapper(更简洁)

通过Jackson2ObjectMapperBuilderCustomizer Bean直接定制全局的ObjectMapper,Spring会自动将配置应用到默认的消息转换器上:

package com.dolphin.soa.post.config;

import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilderCustomizer;

@Configuration
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer longToStringSerializerCustomizer() {
        return builder -> {
            SimpleModule module = new SimpleModule();
            module.addSerializer(Long.class, ToStringSerializer.instance);
            module.addSerializer(Long.TYPE, ToStringSerializer.instance);
            builder.modules(module);
        };
    }
}

可选:局部字段转换

如果不需要全局转换,仅针对特定字段,可以在实体类字段上添加注解:

public class Post {
    // 仅该Long字段会被序列化为字符串
    @JsonSerialize(using = ToStringSerializer.class)
    private Long postId;
    
    // 其他字段...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:25:21