2017-08-29 211 views
2

在我的Spring API中,我想處理Spring的註釋@ResponseStatus的創建,放置和刪除等操作的響應。每個端點都能正常工作,但總是返回空響應。Spring @ResponseStatus返回空響應

爲什麼來自注釋端點的響應是空的?

控制器:

import org.springframework.web.bind.annotation.ResponseStatus; 
import org.springframework.http.HttpStatus; 

@RestController 
@RequestMapping(value = "/v1/portfolios") 
public class PortfolioController { 

    @RequestMapping(method = RequestMethod.POST) 
    @ResponseStatus(HttpStatus.CREATED) 
    public void create(@RequestBody Portfolio resource) { 
     repo.save(resource); 
    } 

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) 
    @ResponseStatus(HttpStatus.OK) 
    public void delete(@PathVariable("id") String id) { 
     repo.removeById(id); 
    } 

} 
+3

的響應是空的,因爲你無法從void的方法返回任何東西。但是空的響應應該與相應的http狀態碼一起提供。你檢查了嗎? –

回答

4

爲什麼從標註的端點回應是空的?

因爲您的方法返回void(意味着沒有正文)。狀態碼 - 它不是一個正文。

你可以試試這個與消息明確地返回響應:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE) 
public ResponseEntity<String> delete(@PathVariable("id") String id) { 
    repo.removeById(id); 
return new ResponseEntity<>("Your message here", HttpStatus.OK); 
    } 

相反的ResponseEntity<String>可以響應期間把ResponseEntity<YourCustomObject>,然後返回new ResponseEntity<>(yourCustomObject instance, HttpStatus.OK);這將是CONVER成JSON。

您也可以這樣:

@ResponseStatus(value = HttpStatus.OK, reason = "Some reason")

在這種情況下,你將返回這樣的事情:

{ 
    "timestamp": 1504007793776, 
    "status": 200, 
    "error": "OK", 
    "message": "Some reason", 
    "path": "/yourPath" 
}