【问题标题】:App Engine - How to passe JSON to QueueApp Engine - 如何将 JSON 传递到队列
【发布时间】:2015-01-18 23:35:31
【问题描述】:

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

所以我创建了一个队列并设置了 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 状态码是 Unsupported Media Type,所以是 JSON。

我能做什么 需要帮助

【问题讨论】:

    标签: java json spring google-app-engine spring-mvc


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2011-06-18
      • 2014-12-06
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多