Reputation:
I have a method, which changes the status from 'Active' to 'InActive' and vice
versa, of a record, by fetching it's id.
Now, I want to convert it to return a ResponseEntity object, inside which, I have a map stored
When I test my method, I get a 400: Bad Request
////////////////////////Old Method////////////////
@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);
}
//////////////////////New Method/////////////////////////////
@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) ;
}
How do I solve this??
Upvotes: 1
Views: 3186
Reputation: 122
Don't pass a json, you only need to pass the resourceId, which you are accepting as a parameter in your method toggleStatus.
Also, use @RequestParam, instead of @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) ;
}
Upvotes: 0
Reputation: 9187
You problem is, you are trying to pass an json
to your /toggleStatus
Method. But your @Controller
accepts only a resourceId
of type Long
.
So your response via Postman should be something like this:
PUT http://localhost:8080/toggleStatus?resouceId=42
also, there is no need for RequestEntity
in your case. Modify your @controller
like this:
@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;
}
Upvotes: 1