首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【SpringBoot】参数装配映射示例

【SpringBoot】参数装配映射示例

作者头像
master336
发布2026-06-15 19:10:10
发布2026-06-15 19:10:10
760
举报
目录
  • pom配置(可选)
  • yml配置
  • 映射
  • 效果
  • 源码

pom配置(可选)

元信息处理,这一步的用处是使用此处理器自动生成配置的元信息,在yml、properties文件配置自定义属性时能有自动提示 参考资料: configuration-metadata-annotation-processor

代码语言:javascript
复制
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

效果:

在这里插入图片描述
在这里插入图片描述

yml配置

  • 基本类型
  • 数组类型(基本属性、List)
  • 集合类型
代码语言:javascript
复制
data:
  test:
    name: testname
    age: 22
    id-nos:
      - 62212200111101A
      - 62212200111101B
      - 62212200111101C
    ext-map:
      home-address:
        name: home
        value: beijing
      work-address:
        name: work
        value: beijing
    user-infos:
      - userName: zhangsan
        age: 18
      - userName: lisi
        age: 22

映射

参数定义及映射

代码语言:javascript
复制
package com.properties.test.config;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.properties.test.vo.UserInfo;
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;

@Configuration
@ConfigurationProperties(prefix = "data.test")
@Data
@ToString
public class DemoProperties {
    private String name;
    private Integer age;
    private List<String> idNos;
    private List<UserInfo> userInfos;
    private Map<String,ExtAddress> extMap;
    /**
     * 重写set方法,将List<Map>转换成目标类型
     * 可以使用序列化或者反射技术
     * @param userInfosMap
     */
    public void setUserInfos(List<Map<String,Object>> userInfosMap){
        ObjectMapper mapper = new ObjectMapper();
        try {
            userInfos = mapper.readValue(mapper.writeValueAsString(userInfosMap),new TypeReference<List<UserInfo>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

使用到的属性对象定义

代码语言:javascript
复制
package com.properties.test.config;

import lombok.Data;

import java.io.Serializable;

@Data
public class ExtAddress implements Serializable {
    private String name;
    private String value;
}
代码语言:javascript
复制
package com.properties.test.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserInfo implements Serializable {
    String userName;
    Integer age;
    String tName;
}

测试接口编写

代码语言:javascript
复制
package com.properties.test.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.properties.test.config.DemoProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("demo")
public class DemoController {
    @Autowired
    DemoProperties demoProperties;
    @ResponseBody
    @GetMapping("/test")
    public String test(){
        log.info("properties:{}", JSONObject.toJSONString(demoProperties));
        return JSONObject.toJSONString(demoProperties);
    }

}

效果

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • pom配置(可选)
  • yml配置
  • 映射
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档