将JSON对象发送到Spring控制器

时间:2014-11-18 09:24:54

标签: java rest spring-mvc

有人可以告诉我为什么我在控制器中变空了。这是我的测试

 public void updatePackage() throws Exception {

    JSONObject updateObj = new JSONObject();

    updateObj.append("packageType", "packageType-update-endpoint");


    SPackage updatedResponse = null;

    try {
        String json = updateObj.toString();
        System.out.println("**** JSON **** ");
        System.out.println(json + "----------" + this.response.getId());
        ResultActions result = mvcController.perform(put("/package/" + this.response.getId())
                .content(json)
                .contentType(MediaType.APPLICATION_JSON))
                .andDo(print())
                .andExpect(status().isOk());
        updatedResponse = JsonUtil.<SPackage>convertJsonToObject(
                result.andReturn().getResponse().getContentAsString(), SPackage.class);
    } catch (Exception e) {
        e.printStackTrace();
        fail("Unexpected exception" + e);
    }

}

这里是我的控制器方法

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody JSONObject sPackage) {
    if (sPackage == null) {
        throw new BadRequestException("Given package is null");
    }

    return softwarePackageService.updatePackage(id,sPackage);
}

我正在使用Spring MVC Controller Mock

2 个答案:

答案 0 :(得分:0)

尝试仅提供数据类型String并尝试将其转换为服务器端的Json format。 并希望能够奏效。

如此简单的解决方案是发送String并转换为JSON

答案 1 :(得分:0)

我修改了代码如下。

           ResultActions result = mvcController.perform(put("/package/" + this.response.getId())
            .content(new ObjectMapper().writeValueAsString(updateObj.toString()))
            .contentType(MediaType.APPLICATION_JSON))
            .andDo(print())
            .andExpect(status().isOk());

我需要对json对象执行.toString(),然后传递给ObjectMapper.writeValueAsString方法