在 AWS 加入并修复此问题之前,我唯一的解决方法是在 Lambda 处理程序中捕获抛出的异常,并使用相同的消息抛出一个包装异常,但将“\n”字符替换为“\n”。这是一个不完美的解决方案,因为目前非代理集成错误处理对该字符序列做了一些奇怪的事情,我最终在 json 中有两个反斜杠和一个 n 而不是一个反斜杠和 n (这是您在json)。
我注意到关于这个集成问题的一个有趣的事情是异常的cause 部分(映射到导致异常的 json 块)确实正确处理换行符(!)。这意味着用一个简单的消息或没有消息的异常包装异常会将原始异常消息正确格式化到json的cause字段中。
这是一个使用我讨论过的方法的非代理 api lambda 集成返回的 json 示例。您可以在 errorMessage 字段中看到额外的反斜杠,并且您可以在 cause errorMessage 字段中看到格式正确的换行符。
{
"errorMessage":"ServerException: Error occurred at position, start= 40, finish=81 with desc='aircraftRegistrationMarking', value='VH OSA?':\\nWARNING - SUSPECT NON-SPEC IN AIRCRAFT REG. MARKING\\n?1 = 100100 = Space - Right Justified\\n",
"errorType":"com.github.davidmoten.aws.helper.ServerException",
"stackTrace":[
"au.gov.amsa.beacon.decoder.Handler.handleRequest(Handler.java:76)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"java.lang.reflect.Method.invoke(Method.java:498)"
],
"cause":{
"errorMessage":"Error occurred at position, start= 40, finish=81 with desc='aircraftRegistrationMarking', value='VH OSA?':\nWARNING - SUSPECT NON-SPEC IN AIRCRAFT REG. MARKING\n?1 = 100100 = Space - Right Justified\n",
"errorType":"java.lang.RuntimeException",
"stackTrace":[
"au.gov.amsa.fgb.internal.DecodeAsJson.getData(DecodeAsJson.java:28)",
"au.gov.amsa.fgb.internal.HexDecoder.decodeFullAsJson(HexDecoder.java:51)",
"au.gov.amsa.fgb.internal.Decoder.decodeFullAsJson(Decoder.java:11)",
"au.gov.amsa.fgb.Beacon15HexId.decodeHexToJson(Beacon15HexId.java:16)",
"au.gov.amsa.beacon.decoder.Handler.handleRequest(Handler.java:39)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"java.lang.reflect.Method.invoke(Method.java:498)"
]
}
}
为了您的利益(并引起 AWS 的注意!)如果我不替换主要异常消息中的新行,这就是我得到的(无效的 JSON,缺少很多双引号字符):
{errorMessage=ServerException: Error occurred at position, start= 40, finish=81 with desc='aircraftRegistrationMarking', value='VH OSA?':
WARNING - SUSPECT NON-SPEC IN AIRCRAFT REG. MARKING
?1 = 100100 = Space - Right Justified
, errorType=com.github.davidmoten.aws.helper.ServerException, stackTrace=["au.gov.amsa.beacon.decoder.Handler.handleRequest(Handler.java:75)","sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)","sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","java.lang.reflect.Method.invoke(Method.java:498)"], cause={errorMessage=Error occurred at position, start= 40, finish=81 with desc='aircraftRegistrationMarking', value='VH OSA?':
WARNING - SUSPECT NON-SPEC IN AIRCRAFT REG. MARKING
?1 = 100100 = Space - Right Justified
, errorType=java.lang.RuntimeException, stackTrace=["au.gov.amsa.fgb.internal.DecodeAsJson.getData(DecodeAsJson.java:28)","au.gov.amsa.fgb.internal.HexDecoder.decodeFullAsJson(HexDecoder.java:51)","au.gov.amsa.fgb.internal.Decoder.decodeFullAsJson(Decoder.java:11)","au.gov.amsa.fgb.Beacon15HexId.decodeHexToJson(Beacon15HexId.java:16)","au.gov.amsa.beacon.decoder.Handler.handleRequest(Handler.java:38)","sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)","sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","java.lang.reflect.Method.invoke(Method.java:498)"]}}