App Engine - 如何将 JSON 传递给队列

App Engine - How to passe JSON to Queue

我想使用 Queue 通过 App Engin 执行长任务。

所以我创建了一个队列并设置了url(这个url是为了执行这个过程)

"columnNamesWrapper"是一个POJO,所以我把它转换成String(json)

@RequestMapping(value = "/submitColumnMapping", consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String submitMapping(@RequestBody final ColumnMappingCommand columnNamesWrapper) throws JsonProcessingException {

    Queue queue = QueueFactory.getDefaultQueue();
    TaskOptions task = TaskOptions.Builder.withUrl("/startProcessing").param("columnNamesWrapper", mapper.writeValueAsString(columnNamesWrapper));
    task.method(TaskOptions.Method.POST);
    task.header("Content-type", "application/json");
    queue.add(task);
}


@RequestMapping(value = "/startProcessing", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String startProcessing(@RequestBody final ColumnMappingCommand columnNamesWrapper) throws IOException {

    System.out.println("RUN");

}

问题,任务抛出异常: [INFO] 信息:http://127.0.0.1:8080/startProcessing 处的 Web 挂钩返回状态代码 415。正在重新安排...

并且 415 状态代码是不受支持的媒体类型,因此 JSON。

我能做什么 需要帮助

您的 startProcessing 方法需要正文中的原始 JSON 数据,而您的请求发送 JSON 编码为 POST 参数。

您可以通过 task.payloady(mapper.writeValueAsString(columnNamesWrapper)) 在正文中发送 JSON 数据,或者

或者您接受 JSON 数据作为 POST 参数:

public @ResponseBody String startProcessing(@RequestParam("columnNamesWrapper") String columnNamesWrapper) {