From 35bdb37a8f2f7ee736af293d7463c4b3f99604d6 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 17 Jun 2021 11:11:05 +0200 Subject: [PATCH] improved inflate method for POST params --- pom.xml | 2 +- .../de/srsoftware/web4rail/Application.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 300759b..aa3e436 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.4.37 + 1.4.38 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java index 41fc6d9..a6c1cc9 100644 --- a/src/main/java/de/srsoftware/web4rail/Application.java +++ b/src/main/java/de/srsoftware/web4rail/Application.java @@ -154,12 +154,29 @@ public class Application extends BaseClass{ private static Params inflate(String data) { //LOG.debug("inflate({})",data); Params params = new Params(); - if (data == null || data.trim().isEmpty()) return params; + if (isNull(data) || data.trim().isEmpty()) return params; String[] parts = data.split("&"); for (String part : parts) { - String[] entry = part.split("=", 2); - params.put(URLDecoder.decode(entry[0],UTF8),URLDecoder.decode(entry[1], UTF8)); + String[] map = part.split("=", 2); + String key = URLDecoder.decode(map[0],UTF8); + String value = URLDecoder.decode(map[1], UTF8); + + Params level = params; + while (key.contains("/")) { // root/path/entry=value mappen zu params[root][path][entry]=value + String[] path = key.split("/", 2); + key = path[0]; + Object entry = level.get(key); + if (entry instanceof Params) { + level = (Params) entry; + } else { + Params dummy = new Params(); + level.put(key, dummy); + level = dummy; + } + key = path[1]; + } + level.put(key,value); } return params;