Spring Boot如何自定义接口响应JSON的属性返回顺序
Spring Boot JSON序列化调整父子类字段顺序方法
Spring Boot默认使用Jackson完成JSON序列化,默认逻辑会按类继承层级从上到下收集字段,优先序列化父类定义的属性,因此会出现基类createdAt、updatedAt字段排在响应最前方的情况,可通过以下两种方案调整为期望的顺序:
方案1:子类添加@JsonPropertyOrder注解显式指定顺序(优先推荐)
该方案无需修改基类代码、无需调整全局配置,仅在需要调整顺序的子类上添加Jackson原生注解,显式声明字段排列顺序即可,适合单实体定制顺序的场景。User类配置示例:
import com.fasterxml.jackson.annotation.JsonPropertyOrder; // 按期望返回顺序罗列字段,父类属性放在列表最后即可 @JsonPropertyOrder({"id", "email", "firstName", "lastName", "createdAt", "updatedAt"}) public class User extends BaseModel { private Long id; private String email; private String firstName; private String lastName; // 省略getter、setter、构造方法 }
配置后序列化输出将完全匹配预期结构:子类自身的id、邮箱、姓名字段在前,父类的两个时间字段排在末尾。
方案2:全局配置Jackson序列化规则(适合多实体统一规则场景)
如果项目中存在大量继承同一基类的实体,所有实体都需要遵循「子类属性优先、父类公共属性靠后」的规则,可通过全局配置统一调整,无需在每个子类上重复添加注解。
在Spring Boot配置类中添加如下自定义配置即可:
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.Comparator; import java.util.List; @Configuration public class JacksonConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer jacksonFieldOrderCustomizer() { return builder -> builder.postConfigurer(objectMapper -> { objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() { @Override public List<BeanPropertyDefinition> findSerializationPropertyOrder( com.fasterxml.jackson.databind.introspect.AnnotatedClass annotatedClass) { List<BeanPropertyDefinition> properties = super.findSerializationPropertyOrder(annotatedClass); if (properties == null) { properties = new ArrayList<>(); } // 按字段所属类排序:当前子类定义的字段排前面,父类继承的字段排后面 properties.sort(Comparator.comparingInt(prop -> prop.getField().getDeclaringClass() == annotatedClass.getRawClass() ? 0 : 1 )); return properties; } }); }); } }
注意:如果对接口返回字段顺序有强一致性要求,优先选择方案1显式指定顺序,避免默认规则变动、全局配置调整导致字段顺序不符合预期。
内容的提问来源于stack exchange,提问作者Mankind1023
相关产品推荐
相关产品推荐

