In this Spring Boot post, You will understand how to read the map from application.yml file where the value of the map is user-defined class.
You may also interested in how to read a Map from the properties file.
P.S Tested with spring boot 2.0.5.RELEASE
Properties file
#Empty file
error-code-meaning:
errorDescriptionMapping:
1000: {errorCode: 1000, meaning: 'AUTHENTICATION_ERROR', httpStatusCode: 401}
1001: {errorCode: 1001, meaning: 'AUTHORIZATION_ERROR', httpStatusCode: 403}
1002: {errorCode: 1002, meaning: 'RESPONSE_TIMEOUT', httpStatusCode: 500}
1003: {errorCode: 1003, meaning: 'NETWORK_ERROR', httpStatusCode: 500}
1004: {errorCode: 1004, meaning: 'UNKNOWN_ERROR', httpStatusCode: 500}
Project dependencies
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.walking.techie</groupId>
<artifactId>custom-object-value-map-read-from-yml-file</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>custom-object-value-map-read-from-yml-file</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ErrorCodeConfig
This is a configuration class which will read the application.yml file and store key-value pair in Map.
package com.walking.techie.config;
import com.walking.techie.model.ErrorDetails;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Map;
@Configuration
@ConfigurationProperties(prefix = "error-code-meaning")
@PropertySource("application.yml")
public class ErrorCodeConfig {
private Map<String, ErrorDetails> errorDescriptionMapping;
public Map<String, ErrorDetails> getErrorDescriptionMapping() {
return errorDescriptionMapping;
}
public void setErrorDescriptionMapping(Map<String, ErrorDetails> errorDescriptionMapping) {
this.errorDescriptionMapping = errorDescriptionMapping;
}
}
ErrorDetails model
package com.walking.techie.model;
public class ErrorDetails {
private String errorCode;
private String meaning;
private Integer httpStatusCode;
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getMeaning() {
return meaning;
}
public void setMeaning(String meaning) {
this.meaning = meaning;
}
public Integer getHttpStatusCode() {
return httpStatusCode;
}
public void setHttpStatusCode(Integer httpStatusCode) {
this.httpStatusCode = httpStatusCode;
}
@Override
public String toString() {
return "ErrorDetails{"
+ "errorCode='"
+ errorCode
+ '\''
+ ", meaning='"
+ meaning
+ '\''
+ ", httpStatusCode="
+ httpStatusCode
+ '}';
}
}
Run Application
package com.walking.techie;
import com.walking.techie.config.ErrorCodeConfig;
import com.walking.techie.model.ErrorDetails;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.util.Map;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
ErrorCodeConfig propertiesFileBean = applicationContext.getBean(ErrorCodeConfig.class);
Map<String, ErrorDetails> keyValuePair = propertiesFileBean.getErrorDescriptionMapping();
for (String key : keyValuePair.keySet()) {
System.out.println("Key:: " + key + " value:: " + keyValuePair.get(key));
}
}
}
Output
When you run this standalone application you will see something like below:
2018-09-29 17:43:39.842 INFO 18928 --- [ main] com.walking.techie.Application : Started Application in 1.636 seconds (JVM running for 2.56)
Key:: 1000 value:: ErrorDetails{errorCode='1000', meaning='AUTHENTICATION_ERROR', httpStatusCode=401}
Key:: 1001 value:: ErrorDetails{errorCode='1001', meaning='AUTHORIZATION_ERROR', httpStatusCode=403}
Key:: 1002 value:: ErrorDetails{errorCode='1002', meaning='RESPONSE_TIMEOUT', httpStatusCode=500}
Key:: 1003 value:: ErrorDetails{errorCode='1003', meaning='NETWORK_ERROR', httpStatusCode=500}
Key:: 1004 value:: ErrorDetails{errorCode='1004', meaning='UNKNOWN_ERROR', httpStatusCode=500}
No comments :
Post a Comment