我遇到了同样的问题,需要正确地将MyCustomClass 带入和带出Lambda Function,以便它可以在Step Function 中通过我的State Machine 而不会出现任何问题。
在Hristo Angelov 发布的内容的基础上,我能够获得一个适合我的解决方案,我发布它希望它能帮助像我一样被困住的其他人:
import java.io.InputStream;
import java.io.OutputStream;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
public class StaticSearchPagingLambdaFunctionHandler implements RequestStreamHandler {
LambdaLogger logger = null;
MyCustomClass myCustomClass = null;
// Register the JavaTimeModule for LocalDate conversion
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
myCustomClass = objectMapper.readValue(inputStream, MyCustomClass .class);
// ...
// Do stuff with myCustomClass
// ...
objectMapper.writeValue(outputStream, myCustomClass);
}
}
尽管 JSON 字符串与 ObjectMapper 写入 OutPutStream 时打印输出不同,但当下一个 lambda 函数在通过 Step Function 时将其接收时,它仍会正确转换为 LocalDate .
确保在MyCustomClass 中您的toString() 方法打印正确。我的toString() 方法如下所示:
import java.time.LocalDate;
import org.json.JSONObject;
public class SimpleSearch {
private LocalDate startDate;
private LocalDate endDate;
// ...
// Getters and Setters for the LocalDate variables
// ...
@Override
public String toString() {
return new JSONObject(this).toString();
}
public SimpleSearch() {}
}
那么当你的 JSON 打印输出被发送到 lambda 时,它总是看起来像这样,而不是其他疯狂的 Jackson 格式:
{
"startDate": "2018-11-01",
"endDate": "2018-11-16"
}
我使用的一些 Maven 依赖项:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.7</version>
</dependency>
希望 AWS 将 Jackson 的转换修复为与 JSON 之间的相互转换,这样我们就不必再求助于这些自定义转换了。