У вас есть два варианта, которые будут работать лучше, чем у вас.Попытка получить строку никогда не работала для меня, так как Java Lambda пытается интерпретировать полезную нагрузку JSON, прежде чем вы ее получите.
Один из вариантов - исключить лямбду, пытающуюся выполнить какую-либо интерпретацию вашего входного объекта.Что-то вроде:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputStream);
String key= jsonNode.get("key").asText();
// key will now be "slide.pptx"
// create object to return...
MyObject myObject = new MyObject();
// create JSON string
String jsonReturn = objectMapper.writeValueAsString(myObject);
// "return" the string
outputStream.write(jsonReturn .getBytes(Charset.forName("UTF-8")));
}
Что вы сделали, так это избежали «полезности» Java-лямбды, когда она пытается превратить входящие данные в нужный вам объект.Это работает очень хорошо, когда у вас есть полный объект, но вы не делаете то, что вам нужно.
Другой вариант - создать объект, который отражает ваш объект Node:
public class KeyObject {
private String key;
public String getKey() {
return key;
}
}
, а затемваша функция обработчика должна быть:
public String handleRequest(KeyObject key, Context context) {
String fileName = key.getKey();
// return as you're doing now.
}
Я считаю, что любой из них будет делать то, что вы хотите.