使用Play 1.2.4发布JSON

时间:2012-10-09 16:17:43

标签: playframework playframework-1.x

我一直试图解决这个问题一段时间,我似乎无法让它正常工作。我有这个接受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”始终为null。我也尝试使用Chrome的“高级休息客户端”来模拟POST请求,但我总是得到相同的结果。

我还注意到,如果我将Content-Type指定为“application / json; charset = utf-8”,则会收到403错误。

任何线索?

感谢。

2 个答案:

答案 0 :(得分:0)

只是一个猜测,但你看过请求()。身体,看看你的JSON是否存在?

答案 1 :(得分:0)

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

/recipes/add/categories?categoryMappingList=json

如果您的客户呼叫是在正文中发布,则不会在 categoryMappingList 参数中选择。从POST正文解析json

categoryMappingList = request.getBody();