Я занимаюсь разработкой веб-сервиса REST, и у меня есть следующее:
Item.java
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "item_generator")
@SequenceGenerator(name="item_generator", sequenceName = "base.item_seq")
@Column(name = "id")
private long id;
@Column(name = "item_name")
private String itemName;
@JsonIgnore
@JsonManagedReference
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(
name="join_category_item",
joinColumns = @JoinColumn(name="item_id"),
inverseJoinColumns = @JoinColumn(name="category_id")
)
private Category category;
}
Category.java
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
public class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "category_generator")
@SequenceGenerator(name="category_generator", sequenceName = "base.category_seq")
@Column(name = "id", nullable = false)
private long id;
@Column(name = "category_name")
private String categoryName;
@JsonBackReference
@OneToMany(mappedBy = "category")
@Fetch(FetchMode.JOIN)
private Collection<Item> items;
{
Класс контроллера:
@PostMapping(value = "/create",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<Item> createItem(@RequestBody Item item) {
// some logic here...
}
Итак, моя проблема в том, что когда я пытаюсь вызвать @PostMapping из @Controller с помощью этого json:
{
"Item": {
"itemName": "Item name",
"category": {
"categoryName": "Category Name"
}
}
}
Я получаю следующую ошибку:
"[http-nio-8080-exec-6] ПРЕДУПРЕЖДЕНИЕ org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - решено [org.springframework.http.converter.HttpMessageNotReadableException: не может быть исключено: JSONразрешить идентификатор типа 'categoryName' как подтип [простой тип, класс com.test.Category]: известный тип id = [Category] (для свойства POJO 'category'); вложенное исключение - com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Не удалось разрешить идентификатор типа 'categoryName' как подтип [простой тип, класс com.test.Category]: известный тип ids = [Category] (для свойства POJO 'category') в [Source: (PushbackInputStream);строка: 5, столбец: 4](через цепочку ссылок: com.test.Item ["category"])] "
Также с использованием
{...," Category ": {"categoryName ":" Имя категории "}}
в моем json (Capital C) не выдает исключение, а просто вводит пост-отображение с нулевой категорией.
Спасибозаранее.