2016-08-15 48 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; 

上的字段名称。