Tenho uma Atividade Web para enviar uma POST
solicitação a uma API criada no Azure Spring Apps. O corpo é composto pelo resultado de uma consulta anterior, em formato JSON. A Atividade Web envia a solicitação corretamente, mas retorna o erro 400.
Os logs de erros mostram:
2025-04-14 13:37:54.582 WARN 1 --- [nio-1025-exec-2] .wsmsDefaultHandlerExceptionResolver: Resolvido [org.springframework.http.converter.HttpMessageNotReadableException: erro de análise JSON: não é possível desserializar o valor do tipo
java.time.OffsetDateTime
da string "2025-04-13T16:34:24.938": falha ao desserializar java.time.OffsetDateTime: (java.time.format.DateTimeParseException) O texto '2025-04-13T16:34:24.938' não pôde ser analisado no índice 23; a exceção aninhada é com.fasterxml.jackson.databind.exc.InvalidFormatException: Não é possível desserializar o valor do tipojava.time.OffsetDateTime
da string "2025-04-13T16:34:24.938": Falha ao desserializar java.time.OffsetDateTime: (java.time.format.DateTimeParseException) O texto '2025-04-13T16:34:24.938' não pôde ser analisado no índice 23 em [Fonte: (org.springframework.util.StreamUtils$NonClosingInputStream); linha: 1, coluna: 306] (por meio da cadeia de referência: java.util.ArrayList[0]->com.core.model.Transaction["transactionDTime"])]
Ao inspecionar a entrada da Web Activity no Synapse, vejo que o transactionDTime
valor está correto, conforme mostrado aqui:
{
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer AASDFASDFADFADF...",
"Accept": "*/*"
},
"url": "https://azure.spring.apps.domain.azuremicroservices.io/api/transaction/bulk",
"connectVia": {
"referenceName": "AutoResolveIntegrationRuntime",
"type": "IntegrationRuntimeReference"
},
"body": [
{
"description": "payload description",
"transactionDTime": "2025-04-13T16:34:24.938Z",
"amount": 10,
"initialBalanceAmount": 100.00,
"currencyCode": "USD",
}
]
}
A diferença que vejo é que, no JSON de entrada, o valor datetime tem o Z à direita para o deslocamento datetime; no entanto, no erro relatado no log, não há Z à direita para UTC. Meu palpite é que isso esteja acionando o erro.
Na verdade, se eu usar o mesmo corpo na minha coleção do Postman, o endpoint da API funciona bem e realiza as atividades esperadas. É por isso que acredito que o problema não está necessariamente no corpo da entrada na WebActivity, mas sim depois disso. Tentei remover o Z no final da string de data usando o Postman e obtive o mesmo erro.
Minha pergunta é: como posso evitar que a Atividade Web altere o literal de data e hora?
ATUALIZAÇÃO Se eu definir o corpo da atividade da Web igual ao corpo do texto, funciona bem. O problema é quando eu defino o corpo como uma expressão, como @variables('currentBatch').
O que eu fiz foi copiar o corpo que aparece na entrada da atividade da Web e colá-lo na caixa de texto do corpo da atividade da Web
ATUALIZAÇÃO 2
Esta é a configuração da WebActivity. Se eu colocar o corpo da entrada diretamente no corpo deste formulário, funciona. Caso contrário, ainda gera uma solicitação inválida.
ATUALIZAÇÃO 3
Esta é a saída da atividade de pesquisa, as datas e horas parecem estar bem formatadas. Assim como na entrada da atividade da web.
{
"count": 5,
"value": [
{
"description": "SWIFT",
"transactionDTime": "2025-04-14T22:54:43.75Z",
"amount": 450,
"initialBalanceAmount": 1700.00,
"currencyCode": "USD"
}
]
}
e esta é a saída da atividade Set CurrentBatch
{ "nome": "currentBatch", "valor": [ { "descrição": "SWIFT", "transactionDTime": "2025-04-14T22:54:43.75Z", "valor": 4500, "initialBalanceAmount": 1773972.48, "currencyCode": "USD", } ] }