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

Spring RestController返回Map对象时如何控制JSON属性的顺序

问题原因

HashMap本身基于哈希表实现,不保证元素的插入顺序,序列化JSON时读取到的键值对顺序本来就和插入顺序不一致,因此会出现返回JSON属性顺序不符合预期的问题。

解决方案

方法1:使用有序Map实现LinkedHashMap(最简便)

LinkedHashMap默认保留元素插入顺序,仅需要替换原有HashMap实现即可,代码修改如下:

@GetMapping("/balance")
public Map<String, Object> fetchAccountsByBalance(){
    // 将HashMap替换为LinkedHashMap
    Map<String, Object> response = new LinkedHashMap<>();
    response.put("records", totalNumberOfRecords);
    response.put("pages", totalPages);
    response.put("data", pageResponse.getContent());
    return response;
}

方法2:定义专用响应实体类(生产环境推荐)

自定义接口响应DTO,通过Jackson的@JsonPropertyOrder注解显式指定序列化顺序,代码可读性和可维护性更高:
首先定义响应实体类:

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
import java.util.List;

@Data
@JsonPropertyOrder({"records", "pages", "data"}) // 按需求指定序列化顺序
public class BalanceResponse {
    private Long records;
    private Integer pages;
    private List<?> data;
}

修改Controller返回该实体类:

@GetMapping("/balance")
public BalanceResponse fetchAccountsByBalance(){
    BalanceResponse response = new BalanceResponse();
    response.setRecords(totalNumberOfRecords);
    response.setPages(totalPages);
    response.setData(pageResponse.getContent());
    return response;
}

方法3:全局配置Jackson序列化规则(仅需按key字母排序时使用)

如果需要所有Map类型返回值都按key的字母顺序序列化,可以在Spring配置文件中添加如下配置:

# application.yml配置
spring:
  jackson:
    serialization:
      order-map-entries-by-keys: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:27:00