2016-08-15 83 views
0

大家好這裏是我有:彈簧安置控制器不支持給內容類型

StockController.java

@RestController 
public class StockController { 

    @Autowired 
    private StockRepository repository; 

    @RequestMapping(value = "stockmanagement/stock") 
    public ResponseEntity<?> addStock(@RequestBody String stock 
    ) { 

     System.out.println(stock); 

     return new ResponseEntity<>(HttpStatus.OK); 
    } 

,當我提出一個要求,像這樣使用Chrome先進休息擴展:

生接頭

Content-Type: application/json 

原始有效載荷

{"stock": {"productId": 2, "expiryAndQuantity" : {}, "id": 0}} 

它的工作原理是出精品來的JSON字符串

然而,當我試圖用股票的股票來代替字符串股票,其中股票看起來是這樣的:

public class Stock { 

    @Id 
    private String id; 

    private String productId; 

    private Map<LocalDateTime, Integer> expiryAndQuantity; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getProductId() { 
     return productId; 
    } 

    public void setProductId(String productId) { 
     this.productId = productId; 
    } 

    public Map<LocalDateTime, Integer> getExpiryAndQuantity() { 
     return expiryAndQuantity; 
    } 

    public void setExpiryAndQuantity(Map<LocalDateTime, Integer> expiryAndQuantity) { 
     this.expiryAndQuantity = expiryAndQuantity; 
    } 

    @Override 
    public String toString() { 
     return String.format(
       "" 
     ); 

    } 
} 

我得到一個錯誤的位置通過以下反饋給我:

"status": 415 
"error": "Unsupported Media Type" 
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException" 
"message": "Content type 'application/json;charset=UTF-8' not supported" 
"path": "/stockmanagement/stock" 

我的問題是;我如何創建映射到我的Stock對象的請求。

回答

1

您可以使用@JsonRootName註解,默認情況下,Spring使用無根名稱值進行序列化。像這樣:

{"productId": 2, "expiryAndQuantity" : {}, "id": 0} 

但如果你想你的序列化有你需要使用@JsonRootName註釋的根名稱。

@JsonRootName(value = "Stock") 

,它會產生這樣的

{"Stock": {"productId": 2, "expiryAndQuantity" : {}, "id": 0}} 

你可以看到更多在這裏

http://www.baeldung.com/jackson-annotations

+0

是不是用於創建響應json對象,有效載荷中的json來自我的請求不是我的迴應 – user1383163

+0

但我認爲請求是一樣的。 – reos

1

,而不是接受一個String接受Stock object.and從接受它的一個post請求比有一個get請求

@RequestMapping(value = "stockmanagement/stock",method=RequestMethod.POST) 
public ResponseEntity<?> addStock(@RequestBody Stock stock){ 
} 

和您的請求應該這樣

{ 
    "productId": 2 
    ,"expiryAndQuantity" : null 
    ,"id": 0 
} 

所有參數名應等於日提交的名稱的對象被髮送,因爲彈簧具有類路徑上jackson binders和對象將在控制器方法內創建。如果您正計劃通過郵寄請求傳遞不同的參數,您可以使用

@JsonProperty("pid") 
private String productId; 

上的字段名稱。