【问题标题】:Return JSON Using Map使用 Map 返回 JSON
【发布时间】:2017-03-30 11:41:02
【问题描述】:

我有一个方法,可以将状态从“Active”更改为“InActive”,反之亦然

反之亦然,通过获取它的 id。

现在,我想转换它以返回一个 ResponseEntity 对象,我在其中存储了一个地图

当我测试我的方法时,我得到一个 400: Bad Request

/////////////////////旧方法///////////// //

@RequestMapping("toggleStatus")
    public @ResponseBody void toggleStatus(@RequestParam("resourceId") Long resourceId ){
        ResourceElementMaster resourceElementMaster = resourceElementService.findById(resourceId);
        if(resourceElementMaster.getIsActive() == true) {
            resourceElementMaster.setIsActive(false);
        } else {
            resourceElementMaster.setIsActive(true);
        }
        resourceElementService.update(resourceElementMaster);
    }

///////////////////新方法////////////// /////////////

@RequestMapping(value="toggleStatus",method=RequestMethod.PUT)
    public @ResponseBody ResponseEntity<Map<String, Object>> toggleStatus(@RequestBody Long resourceId ){
        Map<String, Object> mapToggle=new HashMap<String, Object>();
        ResourceElementMaster resourceElementMaster = resourceElementService.findById(resourceId);
        if(resourceElementMaster.getIsActive() == true) {
            resourceElementMaster.setIsActive(false);
        } else {
            resourceElementMaster.setIsActive(true);
        }
        mapToggle.put("Update",resourceElementService.update(resourceElementMaster));
        return new ResponseEntity<Map<String, Object>>(mapToggle, HttpStatus.OK) ;
    }

我该如何解决这个问题??

【问题讨论】:

  • 为了测试这个方法,我通过的 JSON 是:{ "resourceId": 57, "isActive":true }

标签: json rest hashmap


【解决方案1】:

您的问题是,您正试图将 json 传递给您的 /toggleStatus 方法。但是您的@Controller 只接受resourceId 类型Long

所以你通过 Postman 的回复应该是这样的:

输入http://localhost:8080/toggleStatus?resouceId=42

另外,在您的情况下不需要RequestEntity。像这样修改你的@controller

@ResponseBody 
@RequestMapping(value = "toggleStatus", method = RequestMethod.PUT)
public Object toggleStatus(@RequestParam Long resourceId ){
    Map<String, Object> mapToggle = new HashMap<String, Object>();
    ResourceElementMaster resourceElementMaster = resourceElementService.findById(resourceId);
    resourceElementMaster.setIsActive(!resourceElementMaster.getIsActive());
    mapToggle.put("Update", resourceElementService.update(resourceElementMaster));
    return mapToggle;
}

【讨论】:

  • 相同:400 错误请求。
  • 如何测试它??我在 Postman 中传递了以下 JSON:{ "resourceId": 57, "version":1, "name":"Allegation1", "Active":true }
  • 你为什么要传递json?你的控制器只接受resourceId
【解决方案2】:

不要传递 json,你只需要传递你在方法 toggleStatus 中作为参数接受的 resourceId。

另外,使用@RequestParam,而不是@RequestBody:

@RequestMapping(value="toggleStatus",method=RequestMethod.POST)
public @ResponseBody ResponseEntity<Map<String, Object>> toggleStatus(@RequestParam(value = "resourceId") Long resourceId ){
    Map<String, Object> mapToggle=new HashMap<String, Object>();
    ResourceElementMaster resourceElementMaster = resourceElementService.findById(resourceId);
    if(resourceElementMaster.getIsActive() == true) {
        resourceElementMaster.setIsActive(false);
    } else {
        resourceElementMaster.setIsActive(true);
    }
    mapToggle.put("Update",resourceElementService.update(resourceElementMaster));
    return new ResponseEntity<Map<String, Object>>(mapToggle, HttpStatus.OK) ;
}

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2022-01-24
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多