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

如何在Spring的application.properties中传递复杂对象并在Java类读取?

在Spring的application.properties中存储并读取JSON格式复杂对象的方法

完全可以这么做,下面是具体实现步骤和代码示例:

1. 在application.properties中配置JSON值

直接将你的JSON结构压缩为一行(避免换行带来的格式问题),作为键值对的值:

custom.fields=[{"property":"description","value":"This is a description","required":true},{"property":"link","value":"This is a link","required":false}]

2. 定义对应的Java实体类

创建与JSON结构匹配的实体类,用来映射JSON中的每个对象:

public class Field {
    private String property;
    private String value;
    private boolean required;

    // 生成无参构造、getter和setter方法
    // 也可以用Lombok的@Data注解简化代码
}

3. 读取配置的两种方式

方式一:使用@ConfigurationProperties(推荐,适合复杂配置)

这种方式更优雅,Spring会自动帮你完成JSON到对象的映射:

  • 首先创建配置类:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
@ConfigurationProperties(prefix = "custom")
public class CustomProperties {
    private List<Field> fields;

    public List<Field> getFields() {
        return fields;
    }

    public void setFields(List<Field> fields) {
        this.fields = fields;
    }
}
  • 在Spring Boot启动类上添加@EnableConfigurationProperties(CustomProperties.class)(如果配置类用了@Component,这一步也可以省略)
  • 在需要使用的地方注入配置类即可:
@Service
public class YourService {
    private final CustomProperties customProperties;

    // 构造注入
    public YourService(CustomProperties customProperties) {
        this.customProperties = customProperties;
    }

    public void handleFields() {
        List<Field> fields = customProperties.getFields();
        // 这里编写你的业务逻辑
    }
}

方式二:使用@Value配合ObjectMapper手动解析

如果只是在个别类中使用,也可以直接用@Value读取JSON字符串,再通过Jackson的ObjectMapper转换为对象:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;

@Service
public class YourService {
    private final List<Field> fields;

    public YourService(@Value("${custom.fields}") String fieldsJson, ObjectMapper objectMapper) throws IOException {
        // 将JSON字符串转换为List<Field>
        this.fields = objectMapper.readValue(fieldsJson, new TypeReference<List<Field>>() {});
    }

    // 使用fields的业务逻辑
}

注意事项

  • 确保application.properties中的JSON格式完全正确,双引号闭合、逗号分隔无误,否则会导致解析失败
  • Spring Boot的web starter默认包含Jackson依赖,无需额外引入;如果是非web项目,需要手动添加Jackson的依赖
  • 如果JSON中包含特殊字符(比如换行、双引号嵌套),需要在properties中用\转义,例如\"表示双引号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:05:17