2016-08-15 3 views
0

Привет всем здесь является то, что у меня есть:Spring контроллер остальное дает неподдерживаемый тип контента

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); 
    } 

когда я сделать запрос, как это, используя хром расширенный расширение отдыха:

Raw Заголовки

Content-Type: application/json 

Raw Payload

{"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" 

Мой вопрос: как создать запрос, который сопоставляется с моим объектом «Акция».

ответ

1

Вы можете попробовать: @JsonRootName аннотация по умолчанию Весна сериализуется без значения имени корня. как это:

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

Но если вы хотите, чтобы ваша сериализация имеет rootname вам нужно использовать @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 принять его от a 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; 

на имя поля.

Смежные вопросы