Spring rest控制器提供不支持的内容类型
大家好,这是我所拥有的: StockController.javaSpring rest控制器提供不支持的内容类型,spring,rest,post,Spring,Rest,Post,大家好,这是我所拥有的: StockController.java @RestController public class StockController { @Autowired private StockRepository repository; @RequestMapping(value = "stockmanagement/stock") public ResponseEntity<?> addStock(@RequestBody St
@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);
}
原始有效载荷
{"stock": {"productId": 2, "expiryAndQuantity" : {}, "id": 0}}
它可以很好地工作,输出一个json字符串
但是,当我尝试用stock stock替换字符串stock时,stock如下所示:
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(
""
);
}
}
{"productId": 2, "expiryAndQuantity" : {}, "id": 0}
我的问题是,;如何创建映射到我的Stock对象的请求。您可以尝试使用@JsonRootName注释,默认情况下,Spring序列化不使用root name值。像这样:
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(
""
);
}
}
{"productId": 2, "expiryAndQuantity" : {}, "id": 0}
但是,如果希望序列化具有rootname,则需要使用@JsonRootName注释
@JsonRootName(value = "Stock")
它会产生像这样的东西
{"Stock": {"productId": 2, "expiryAndQuantity" : {}, "id": 0}}
{
"productId": 2
,"expiryAndQuantity" : null
,"id": 0
}
你可以在这里看到更多
您可以尝试使用@JsonRootName注释,默认情况下,Spring序列化不使用根名称值。像这样:
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(
""
);
}
}
{"productId": 2, "expiryAndQuantity" : {}, "id": 0}
但是,如果希望序列化具有rootname,则需要使用@JsonRootName注释
@JsonRootName(value = "Stock")
它会产生像这样的东西
{"Stock": {"productId": 2, "expiryAndQuantity" : {}, "id": 0}}
{
"productId": 2
,"expiryAndQuantity" : null
,"id": 0
}
你可以在这里看到更多
而不是接受
字符串
接受股票
对象。从post
请求接受它,而不是接受get
请求
@RequestMapping(value = "stockmanagement/stock",method=RequestMethod.POST)
public ResponseEntity<?> addStock(@RequestBody Stock stock){
}
所有参数名都应该等于对象的字段名,因为spring在类路径上有jackson绑定器
,并且对象将在控制器方法内部创建。如果计划从post请求传递不同的参数,则可以使用
@JsonProperty("pid")
private String productId;
在字段名上。而不是接受
字符串
接受股票
对象。并从post
请求接受它,而不是接受get
请求
@RequestMapping(value = "stockmanagement/stock",method=RequestMethod.POST)
public ResponseEntity<?> addStock(@RequestBody Stock stock){
}
所有参数名都应该等于对象的字段名,因为spring在类路径上有jackson绑定器
,并且对象将在控制器方法内部创建。如果计划从post请求传递不同的参数,则可以使用
@JsonProperty("pid")
private String productId;
在字段名上。这不是为了创建响应json对象,有效负载中的json来自我的请求而不是我的响应,但我认为这对于请求是一样的。这不是为了创建响应json对象,有效负载中的json来自我的请求而不是我的响应,但我认为对于请求也是一样的。