My query looks like this:
select MESSAGE, OFFSET from SRV_TABLE where STATUS='404';
I want to retry the messages that failed, but the message is a json string and the offset is a regular string. I need to extract the json messages and the offset strings and then iterate through each row. How would I do this? RIght now I am doing something like this:
public void retryFailedMessages() { JsonNode failedMessages = service.getFailedMessages(); Iterator<JsonNode> iter = failedMessages.elements(); while(iter.hasNext()) { JsonNode message = iter.next(); String mess = message.get("MESSAGE").toString(); String offset = message.get("OFFSET").toString(); service.retry(mess, offset); } }
//Service
String responseString = ""; JsonNode responseObj = null; List<String> responseList; try{ responseLIst = dataAccessLayer.getFailedMessages(); responseString = buildQueryResult(responseList); responseObj = objectMapper.readTree(responseString); } catch( Exception e) { e.printStackTrace(); } return responseObj;
buildQueryResult() simply appends all the strings together so the mapper can read it altogether. The mapper ignores the offset and doesn’t include it in the json, bceause it isn’t a valid json. How do I keep the offset and message and pass both to the service.retry() method?
Advertisement
Answer
You need to convert your string/json to a POJO or another way to convert it to object. I recomend you to use Jackson library and map it to a pojo.
Another way is to use some tools from the database to query directly:
select JSON_VALUE(MESSAGE, '$.your.query') as query, JSON_VALUE(MESSAGE, '$.another.query') as another, OFFSET from SRV_TABLE where STATUS='404';
In that way you can handle the values as a string at your code.
Can read more here: https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15