05-07-2021 09:05 AM
I am developing a custom SNAP that makes HTTP request and gets JSON response in return. The response is array of objects. In order to right it to document , currently it only shows up if I convert the response to string in following manner:
Map<String, Object> data = new LinkedHashMap<>();
data.put(“Response”, response);
outputViews.write(documentUtility.newDocumentFor(document, data));
But I’d like to instead preview the response in standard json format in outputview. Any idea how this can be achieved ? Any help would be appreciated . Thank you!
Solved! Go to Solution.
05-11-2021 09:45 AM
Yes, you’ll want to use the Jackson library’s ObjectMapper class for that.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
...
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TypeReference<Object> TYPE_REF = new TypeReference<Object>() {};
...
Object parsedResponse = OBJECT_MAPPER.readValue(response, TYPE_REF);
Note there are other versions of the readValue method that take a Reader or InputStream, which means you might be able to avoid reading the entire response as a String.
Hope that helps.
05-11-2021 09:21 AM
What is response
’s data type? String?
05-11-2021 09:24 AM
Yes- The response is of type string
This is the structured response I get when using CORE REST GET SNAP.
But with custom snap- I am unable to get the similar structure. What am I missing?
05-11-2021 09:45 AM
Yes, you’ll want to use the Jackson library’s ObjectMapper class for that.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
...
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TypeReference<Object> TYPE_REF = new TypeReference<Object>() {};
...
Object parsedResponse = OBJECT_MAPPER.readValue(response, TYPE_REF);
Note there are other versions of the readValue method that take a Reader or InputStream, which means you might be able to avoid reading the entire response as a String.
Hope that helps.
05-11-2021 09:47 AM
I’ll try that.
The final step would be to add parsedResponse to Map - something like this:
Map<String, Object> data = new LinkedHashMap<>();
data.put(“Response”, parsedResponse);
outputViews.write(documentUtility.newDocumentFor(document, data)) - right ?