使用 Play 1.2.4 发布 JSON

Posted

技术标签:

【中文标题】使用 Play 1.2.4 发布 JSON【英文标题】:POSTing JSON with Play 1.2.4 【发布时间】:2012-10-09 16:17:42 【问题描述】:

我已经尝试解决这个问题一段时间了,但我似乎无法让它正常工作。我有这个接受 JSON 内容的 POST 服务:

public static void addLifestyleToRecipes(String categoryMappingList) 
    Logger.info("In RecipeServices--> addLifestyleToRecipes");
    Logger.info("JSON received: %s", categoryMappingList);      
    Type type = new TypeToken<List<CategoryMapping>>() 
    .getType();
    List<CategoryMapping> categoryMapping = new Gson().fromJson(categoryMappingList, type);

    for (CategoryMapping cat : categoryMapping) 
            //the rest is irrelevant to the problem


当我用功能测试测试我的方法时,一切正常:

List<CategoryMapping> list = new ArrayList<CategoryMapping>();
list.add(new CategoryMapping(MULTI_LANG_ID, recipes));
list.add(new CategoryMapping(MULTI_LANG_ID, recipes));

String body = new Gson().toJson(list);

Map<String, String> params = new HashMap<String, String>();
params.put("categoryMappingList", body);

StringBuffer url = TestHelper.generateBaseUrl(apiKey, apiVersion);
url.append("/recipes/add/categories");

Response response = POST(url, params);

当我尝试实际调用服务时出现问题,我的参数“categoryMappingList”始终为空。我也尝试使用 Chrome 的“Advanced Rest Client”来模拟 POST 请求,但我总是得到相同的结果。

我还注意到,如果我将 Content-Type 指定为“application/json; charset=utf-8”以外的任何内容,我会收到 403 错误。

有什么线索吗?

谢谢。

【问题讨论】:

能否添加调用服务的客户端代码 【参考方案1】:

在您的功能测试中,您将 json 作为参数添加

/recipes/add/categories?categoryMappingList=json

如果您的客户调用将其发布在正文中,则不会在 categoryMappingList 参数中获取。从 POST 正文中解析 json

categoryMappingList = request.getBody();

【讨论】:

【参考方案2】:

只是猜测,但您是否查看了 request().body 以查看您的 JSON 是否存在?

【讨论】:

以上是关于使用 Play 1.2.4 发布 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 play 1.2.4 框架发送电子邮件

在 Play 1.2.4 中运行测试套件

使用 Play 以 JSON 形式返回验证错误!框架

Scala,使用 play 2.5 将 joda.LocalDateTime 转换为 json

模板中的参考模型超出请求/页面范围,在 Play! 1.2.4

使用 Play-JSON 库解析对象序列