Как заставить этот запрос POST принимать полезную нагрузку, где я передаю массив объектов JSON. Есть ли способ решить эту проблему. Любое предложение поможет?
package com.fyle.app.resources.lambda;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.schibsted.spt.data.jslt.Parser;
import com.schibsted.spt.data.jslt.Expression;
import com.schibsted.spt.data.jslt.impl.NodeUtils;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/api")
public class LambdaFunction {
/**
* Transform the incoming JSON with JSLT and return the result.
*/
@POST
@Path("/json-post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String invoke(InputJson json) {
try {
// this must be:
// {"json" : ..., "jslt" : jslt}
JsonNode input = mapper.convertValue(json.getJson(), JsonNode.class);
// now we can do the thing
JsonNode source = NodeUtils.mapper.readTree(input.get("json").asText());
//String jslt = input.get("jstlTemplateString").asText();
String jstlTemplateString = json.get("jstlTemplateString");
Expression template = Parser.compileString(jstlTemplateString);
JsonNode output = template.apply(source);
return NodeUtils.mapper.writerWithDefaultPrettyPrinter().writeValueAsString(output);
} catch (Throwable e) {
return "ERROR: " + e;
}
}
Полезная нагрузка JSON, которую он принимает ::
{
"json":"[{\"Key1\": \"Value1\", \"Key2\": \"Value2\", \"Key3\": \"Value3\"},{\"Key1\":
\"Value1\", \"Key2\": \"Value2\", \"Key3\": \"Value3\"},{\"Key1\": \"Value1\", \"Key2\":
\"Value2\", \"Key3\": \"Value3\"}]”,
"jstl":"\n[\nfor (.)\n{\n \"Key-Change-1\" : .Key1,\n \"Key-Change-2\": .\"Key2\",\n \"Key-
Change-3\" : .\"Key3\"\n}\n]\n”
}
Можем ли мы принимать данные только в формате JSON без этих "\ and \ n"
{"json": "["key":"value" , "key":"value" , "key":"value"]" , "jslt":"template.jslt"}
Мой класс полезной нагрузки ::
public class InputJson {
Object json;
String jstlTemplateString;
public Object getJson() {
return json;
}
public void setJson(Object json) {
this.json = json;
}
public String getJstlTemplateString() {
return jstlTemplateString;
}
public void setJstlTemplateString(String jstlTemplateString) {
this.jstlTemplateString = jstlTemplateString;
}
public String get(String jstlTemplateString) {
return jstlTemplateString;
}
}
Это файл класса, который я использую, но все еще с той же ошибкой. Я думаю, что проблема с этой строкой
JsonNode source = NodeUtils.mapper.readTree(input.get("json").asText());
Ожидается, что вход будет строкой, а не объектами JSON. Является ли это основной причиной этой проблемы?