diff --git a/archetypes/jersey/pom.xml b/archetypes/jersey/pom.xml
index 459bdfacc..74dcea2cc 100644
--- a/archetypes/jersey/pom.xml
+++ b/archetypes/jersey/pom.xml
@@ -5,6 +5,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ../..
com.amazonaws.serverless.archetypes
diff --git a/archetypes/spark/pom.xml b/archetypes/spark/pom.xml
index 196b1a42d..5396c6674 100644
--- a/archetypes/spark/pom.xml
+++ b/archetypes/spark/pom.xml
@@ -5,6 +5,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ../..
com.amazonaws.serverless.archetypes
diff --git a/archetypes/spring/pom.xml b/archetypes/spring/pom.xml
index b69b57280..ce0835f1c 100644
--- a/archetypes/spring/pom.xml
+++ b/archetypes/spring/pom.xml
@@ -5,6 +5,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ../..
com.amazonaws.serverless.archetypes
diff --git a/archetypes/springboot/pom.xml b/archetypes/springboot/pom.xml
index af4cb0f1c..e697e26c3 100644
--- a/archetypes/springboot/pom.xml
+++ b/archetypes/springboot/pom.xml
@@ -5,6 +5,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ../..
com.amazonaws.serverless.archetypes
diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml
index 278a5a983..b5ad8d613 100644
--- a/aws-serverless-java-container-core/pom.xml
+++ b/aws-serverless-java-container-core/pom.xml
@@ -12,6 +12,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ..
diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java
index de0f58c23..32d5b814c 100644
--- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java
+++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java
@@ -265,14 +265,17 @@ public Collection getHeaderNames() {
@Override
public String getCharacterEncoding() {
- return headers.getFirst(HttpHeaders.CONTENT_ENCODING);
+ final String contentType = Optional.ofNullable(getContentType()).orElse("");
+ if (contentType.contains(";")) {
+ return contentType.split(";")[1].split("=")[1].trim().toLowerCase(Locale.getDefault());
+ } else {
+ return "";
+ }
}
@Override
- public String getContentType() {
- return headers.getFirst(HttpHeaders.CONTENT_TYPE);
- }
+ public String getContentType() { return getHeader(HttpHeaders.CONTENT_TYPE); }
@Override
@@ -334,7 +337,10 @@ public PrintWriter getWriter() throws IOException {
@Override
public void setCharacterEncoding(String s) {
- setHeader(HttpHeaders.CONTENT_ENCODING, s, true);
+ final String characterEncoding = Optional.ofNullable(s).orElse("").toLowerCase(Locale.getDefault());
+ final String oldValue = Optional.ofNullable(getHeader(HttpHeaders.CONTENT_TYPE)).orElse("");
+ String contentType = oldValue.contains(";") ? oldValue.split(";")[0].trim(): oldValue;
+ setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", contentType, characterEncoding), true);
}
diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java
index 553b7c619..ff8893257 100644
--- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java
+++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java
@@ -140,6 +140,49 @@ public void cookie_addCookieWithoutMaxAge_expectNoExpires() {
assertFalse(cookieHeader.contains("Expires"));
}
+ @Test
+ public void characterEncoding_setCharacterEncoding() {
+ AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null);
+ resp.setContentType("application/json");
+ resp.setCharacterEncoding("UTF-8");
+ assertNotEquals("UTF-8", resp.getHeader("Content-Encoding"));
+ assertEquals("application/json; charset=utf-8", resp.getContentType());
+ assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type"));
+ }
+
+ @Test
+ public void characterEncoding_setContentType() {
+ AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null);
+ resp.setContentType("application/json; charset=utf-8");
+ resp.setCharacterEncoding("UTF-8");
+
+ assertEquals("application/json; charset=utf-8", resp.getContentType());
+ assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type"));
+ assertEquals("utf-8", resp.getCharacterEncoding());
+ }
+
+ @Test
+ public void characterEncoding_setContentTypeAndsetCharacterEncoding() {
+ AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null);
+ resp.setContentType("application/json");
+ resp.setCharacterEncoding("UTF-8");
+
+ assertEquals("application/json; charset=utf-8", resp.getContentType());
+ assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type"));
+ assertEquals("utf-8", resp.getCharacterEncoding());
+ }
+
+ @Test
+ public void characterEncoding_setCharacterEncodingAndsetContentType() {
+ AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null);
+ resp.setCharacterEncoding("UTF-8");
+ resp.setContentType("application/json");
+
+ assertEquals("application/json", resp.getContentType());
+ assertEquals("application/json", resp.getHeader("Content-Type"));
+ assertEquals("", resp.getCharacterEncoding());
+ }
+
private int getMaxAge(String header) {
Matcher ageMatcher = MAX_AGE_PATTERN.matcher(header);
assertTrue(ageMatcher.find());
diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml
index 9e7998ec5..025737752 100644
--- a/aws-serverless-java-container-jersey/pom.xml
+++ b/aws-serverless-java-container-jersey/pom.xml
@@ -12,6 +12,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ..
diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml
index 5aac26d26..ff52be35a 100644
--- a/aws-serverless-java-container-spark/pom.xml
+++ b/aws-serverless-java-container-spark/pom.xml
@@ -12,6 +12,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ..
diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml
index c877425c3..bac70d846 100644
--- a/aws-serverless-java-container-spring/pom.xml
+++ b/aws-serverless-java-container-spring/pom.xml
@@ -12,6 +12,7 @@
com.amazonaws.serverless
aws-serverless-java-container
1.2-SNAPSHOT
+ ..