GH-787 Fix 'body' format in JSON output for AWS responses
Resolves #787
This commit is contained in:
@@ -193,7 +193,7 @@ final class AWSLambdaUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String body = responseMessage == null
|
String body = responseMessage == null
|
||||||
? "\"OK\"" : new String(responseMessage.getPayload(), StandardCharsets.UTF_8).replaceAll("\\\"", "");
|
? "\"OK\"" : new String(responseMessage.getPayload(), StandardCharsets.UTF_8);
|
||||||
response.put("body", body);
|
response.put("body", body);
|
||||||
|
|
||||||
if (responseMessage != null) {
|
if (responseMessage != null) {
|
||||||
|
|||||||
@@ -701,7 +701,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("HELLO");
|
assertThat(result.get("body")).isEqualTo("\"HELLO\"");
|
||||||
|
|
||||||
System.clearProperty("spring.cloud.function.definition");
|
System.clearProperty("spring.cloud.function.definition");
|
||||||
System.setProperty("spring.cloud.function.routing-expression", "'uppercase'");
|
System.setProperty("spring.cloud.function.routing-expression", "'uppercase'");
|
||||||
@@ -711,7 +711,23 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("HELLO");
|
assertThat(result.get("body")).isEqualTo("\"HELLO\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
@Test
|
||||||
|
public void testApiGatewayPojoReturninPojo() throws Exception {
|
||||||
|
System.setProperty("MAIN_CLASS", ApiGatewayConfiguration.class.getName());
|
||||||
|
System.setProperty("spring.cloud.function.definition", "uppercasePojoReurnPojo");
|
||||||
|
FunctionInvoker invoker = new FunctionInvoker();
|
||||||
|
|
||||||
|
InputStream targetStream = new ByteArrayInputStream(this.apiGatewayEventWithStructuredBody.getBytes());
|
||||||
|
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||||
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
|
Map response = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
|
Person person = mapper.readValue((String) response.get("body"), Person.class);
|
||||||
|
assertThat(person.getName()).isEqualTo("JIM LAHEY");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -726,7 +742,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("JIM LAHEY");
|
assertThat(result.get("body")).isEqualTo("\"JIM LAHEY\"");
|
||||||
|
|
||||||
System.clearProperty("spring.cloud.function.definition");
|
System.clearProperty("spring.cloud.function.definition");
|
||||||
System.setProperty("spring.cloud.function.routing-expression", "'uppercasePojo'");
|
System.setProperty("spring.cloud.function.routing-expression", "'uppercasePojo'");
|
||||||
@@ -736,7 +752,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("JIM LAHEY");
|
assertThat(result.get("body")).isEqualTo("\"JIM LAHEY\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -752,7 +768,7 @@ public class FunctionInvokerTests {
|
|||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
assertThat(result.get("body")).isEqualTo("hello");
|
assertThat(result.get("body")).isEqualTo("\"hello\"");
|
||||||
|
|
||||||
System.clearProperty("spring.cloud.function.definition");
|
System.clearProperty("spring.cloud.function.definition");
|
||||||
System.setProperty("spring.cloud.function.routing-expression", "'inputApiEvent'");
|
System.setProperty("spring.cloud.function.routing-expression", "'inputApiEvent'");
|
||||||
@@ -762,7 +778,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("hello");
|
assertThat(result.get("body")).isEqualTo("\"hello\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -778,7 +794,7 @@ public class FunctionInvokerTests {
|
|||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
assertThat(result.get("body")).isEqualTo("Hello from Lambda");
|
assertThat(result.get("body")).isEqualTo("\"Hello from Lambda\"");
|
||||||
|
|
||||||
System.clearProperty("spring.cloud.function.definition");
|
System.clearProperty("spring.cloud.function.definition");
|
||||||
System.setProperty("spring.cloud.function.routing-expression", "'inputApiV2Event'");
|
System.setProperty("spring.cloud.function.routing-expression", "'inputApiV2Event'");
|
||||||
@@ -788,7 +804,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
result = this.mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("Hello from Lambda");
|
assertThat(result.get("body")).isEqualTo("\"Hello from Lambda\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -804,7 +820,7 @@ public class FunctionInvokerTests {
|
|||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
assertThat(result.get("body")).isEqualTo("boom");
|
assertThat(result.get("body")).isEqualTo("\"boom\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -874,7 +890,7 @@ public class FunctionInvokerTests {
|
|||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
assertThat(result.get("body")).isEqualTo("hello");
|
assertThat(result.get("body")).isEqualTo("\"hello\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -890,7 +906,7 @@ public class FunctionInvokerTests {
|
|||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
assertThat(result.get("body")).isEqualTo("hello");
|
assertThat(result.get("body")).isEqualTo("\"hello\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -937,7 +953,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("olleh");
|
assertThat(result.get("body")).isEqualTo("\"olleh\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@@ -953,7 +969,7 @@ public class FunctionInvokerTests {
|
|||||||
invoker.handleRequest(targetStream, output, null);
|
invoker.handleRequest(targetStream, output, null);
|
||||||
|
|
||||||
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
Map result = mapper.readValue(output.toByteArray(), Map.class);
|
||||||
assertThat(result.get("body")).isEqualTo("OLLEH");
|
assertThat(result.get("body")).isEqualTo("\"OLLEH\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -1179,6 +1195,15 @@ public class FunctionInvokerTests {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Function<Person, Person> uppercasePojoReurnPojo() {
|
||||||
|
return v -> {
|
||||||
|
Person p = new Person();
|
||||||
|
p.setName(v.getName().toUpperCase());
|
||||||
|
return p;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Function<APIGatewayProxyRequestEvent, String> inputApiEvent() {
|
public Function<APIGatewayProxyRequestEvent, String> inputApiEvent() {
|
||||||
return v -> {
|
return v -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user