最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot3+將ID轉(zhuǎn)為JSON字符串的詳細(xì)配置方案

 更新時間:2025年06月11日 16:12:03   作者:墮落年代  
這篇文章主要介紹了純后端實現(xiàn) Long/BigInteger ID 轉(zhuǎn)為 JSON 字符串 的詳細(xì)配置方案,s 基于 Spring Boot 3+ 和 SpringDoc (OpenAPI) 最新實踐,需要的可以了解下

1. 添加依賴

確保你的 pom.xml(或 Gradle)中包含:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  <version>2.x</version>
</dependency>

2. 全局 Jackson 配置

創(chuàng)建一個全局 ObjectMapper,讓所有 Long 類型自動序列化為字符串:

@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();

        // Java 8 日期時間支持
        mapper.registerModule(new JavaTimeModule());
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

        // 去掉 null 字段
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        // 將 Long / long 轉(zhuǎn)為 String
        SimpleModule idModule = new SimpleModule();
        idModule.addSerializer(Long.class, ToStringSerializer.instance);
        idModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        idModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
        mapper.registerModule(idModule);

        return mapper;
    }
}

上述配置無需在 POJO 上添加注解,確保所有后端輸出中的 Long/BigInteger 都以字符串形式傳輸。這是社區(qū)常用解決方案,也是 StackOverflow 推薦做法 。

3. 精準(zhǔn)控制(可選)

如有需求,僅針對某些字段轉(zhuǎn)換,新增注解支持:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@JacksonAnnotationsInside
@JsonSerialize(using = ToStringSerializer.class)
public @interface StringId {}

使用方式:

public class User {
    @StringId
    private Long id;
    private String name;
}

并在全局配置中掃描該注解,使用 BeanSerializerModifier 判斷并替換:

@Bean
public Jackson2ObjectMapperBuilderCustomizer customIdSerializer() {
    return builder -> builder.modules(new SimpleModule() {
        @Override
        public void setupModule(SetupContext context) {
            context.addBeanSerializerModifier(new BeanSerializerModifier() {
                @Override
                public List<BeanPropertyWriter> changeProperties(
                        SerializationConfig config,
                        BeanDescription beanDesc,
                        List<BeanPropertyWriter> props) {
                    return props.stream().map(writer -> {
                        if (writer.getAnnotation(StringId.class) != null) {
                            return writer.withSerializer(ToStringSerializer.instance);
                        }
                        return writer;
                    }).toList();
                }
            });
        }
    });
}

4. OpenAPI (SpringDoc) 類型同步

為了 Swagger 文檔中顯示 ID 為 “string” 而不是 “integer”,增加 OpenAPI 自定義:

@Bean
public OpenApiCustomiser idAsStringSchemaCustomizer() {
    return openApi -> {
        openApi.getComponents().getSchemas().forEach((name, schema) -> {
            if (schema.getProperties() != null) {
                schema.getProperties().forEach((propName, propSchema) -> {
                    if (propName.toLowerCase().endsWith("id") 
                        && "integer".equals(propSchema.getType())) {
                        propSchema.setType("string");
                        propSchema.setFormat("int64");
                    }
                });
            }
        });
    };
}

使用步驟總結(jié)

引入依賴 - Jackson、JSR?310、SpringDoc。

配置全局 ObjectMapper - Long/String 自動轉(zhuǎn)換。

(可選)添加 @StringId 注解 - 精細(xì)控制。

同步 OpenAPI Schema 類型 - Swagger 查看準(zhǔn)確。

測試驗證:序列化、反序列化均正常。

測試示例

@SpringBootTest
public class IdConversionTest {
    @Autowired ObjectMapper mapper;

    @Test
    void testLongToString() throws Exception {
        TestEntity e = new TestEntity();
        e.setId(1234567890123456789L);
        String json = mapper.writeValueAsString(e);
        assertTrue(json.contains("\"id\":\"1234567890123456789\""));
    }

    @Test
    void testStringToLong() throws Exception {
        String json = "{\"id\":\"1234567890123456789\"}";
        TestEntity e = mapper.readValue(json, TestEntity.class);
        assertEquals(1234567890123456789L, e.getId());
    }

    static class TestEntity { Long id; /* getter-setter */ }
}

這樣可以 無感 在后端處理,前端收到字符串,避免 JS 精度問題,同時 Swagger 文檔也保持一致。

如果需要我?guī)湍憧焖俾涞剡@套配置在你項目中,可以提供你 Spring Boot 和 SpringDoc 版本,我來進(jìn)一步定制配置。

到此這篇關(guān)于Springboot3+將ID轉(zhuǎn)為JSON字符串的詳細(xì)配置方案的文章就介紹到這了,更多相關(guān)Springboot ID轉(zhuǎn)JSON字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中synchronized Lock(本地同步)鎖的8種情況

    java中synchronized Lock(本地同步)鎖的8種情況

    本文主要介紹了java中synchronized Lock(本地同步)鎖的8種情況,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java獲取當(dāng)前時間的時間戳方法總結(jié)

    Java獲取當(dāng)前時間的時間戳方法總結(jié)

    Java中獲取時間戳的方式有很多種,下面這篇文章主要給大家介紹了關(guān)于Java獲取當(dāng)前時間的時間戳的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-06-06
  • Java基于redis實現(xiàn)分布式鎖

    Java基于redis實現(xiàn)分布式鎖

    系統(tǒng)的不斷擴(kuò)大,分布式鎖是最基本的保障。今天我們介紹通過redis實現(xiàn)分布式鎖,感興趣的朋友可以參考下
    2021-05-05
  • 解決get請求入?yún)NotNull驗證不生效問題

    解決get請求入?yún)NotNull驗證不生效問題

    這篇文章主要介紹了解決get請求入?yún)NotNull驗證不生效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Maven屬性與版本管理詳細(xì)步驟分解

    Maven屬性與版本管理詳細(xì)步驟分解

    這篇文章主要介紹了Maven中關(guān)于屬性與版本控制管理的步驟操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • spring mvc實現(xiàn)文件上傳并攜帶其他參數(shù)的示例

    spring mvc實現(xiàn)文件上傳并攜帶其他參數(shù)的示例

    本篇文章主要介紹了spring mvc實現(xiàn)文件上傳并攜帶其他參數(shù)的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 簡單學(xué)習(xí)Java+MongoDB

    簡單學(xué)習(xí)Java+MongoDB

    本文給大家介紹的是如何簡單的使用java+MongoDB實現(xiàn)數(shù)據(jù)調(diào)用的問題,非常的實用,有需要的小伙伴可以參考下
    2016-03-03
  • java 創(chuàng)建線程的幾種方式

    java 創(chuàng)建線程的幾種方式

    本文主要介紹了java中創(chuàng)建線程的幾種方式。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • java中如何區(qū)分==和equals

    java中如何區(qū)分==和equals

    這篇文章主要介紹了java中如何區(qū)分==和equals,文中講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Spring Boot CORS 配置方法允許跨域請求的最佳實踐方案

    Spring Boot CORS 配置方法允許跨域請求的最佳實踐方案

    跨域請求在現(xiàn)代Web開發(fā)中非常重要,特別是在涉及多個前端和后端服務(wù)時,本文詳細(xì)介紹了跨域請求的背景、重要性以及如何解決跨域問題,通過SpringBoot框架的CORS配置,可以有效地處理跨域請求,確保數(shù)據(jù)傳輸?shù)陌踩院陀脩趔w驗,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評論

桦南县| 绥江县| 汤阴县| 江城| 子洲县| 延寿县| 洞头县| 澄城县| 衡山县| 肇源县| 兴安盟| 永平县| 淮南市| 诸暨市| 淳化县| 田阳县| 融水| 喀什市| 新乡县| 甘孜县| 鄯善县| 婺源县| 乌拉特后旗| 芮城县| 彰化县| 武邑县| 香格里拉县| 山东省| 苍山县| 永靖县| 永嘉县| 藁城市| 道真| 监利县| 黔南| 水城县| 应用必备| 晴隆县| 响水县| 木兰县| 庄浪县|