Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent Spring Boot from parsing YAML keys with dots

I have a YAML configuration file with a map of properties:

properties:
  a.b.c: 1

Boot will parse this as:

{a:{b:{c:1}}}

However, what I desire is :

{'a.b.c': 1}

Is there anyway to coax it into "pass through" key mode? Quoting the key doesn't seem to help.


Update

Actual example below.

Java

import static com.google.common.collect.Maps.newLinkedHashMap;

import java.util.Map;
import javax.annotation.PostConstruct;

import lombok.Data;
import lombok.val;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties("hadoop")
public class HadoopProperties {

   private Map<Object, Object> properties = newLinkedHashMap();

}

YAML

application.yml:

hadoop:
   properties:
      fs.defaultFS: hdfs://localhost:8020
      mapred.job.tracker: localhost:8021

Result

Calling toString() on the resulting object:

HadoopProperties(properties={fs={defaultFS=hdfs://localhost:8020}, mapred={job={tracker=localhost:8021}}})

like image 701
btiernay Avatar asked Apr 28 '14 20:04

btiernay


1 Answers

I see. It's because you are binding to a very generic object, so Spring Boot thinks your period separators are map key dereferences. What happens if you bind to Map or Properties?

like image 102
Dave Syer Avatar answered Oct 01 '22 05:10

Dave Syer