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) {
我想使用 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) {