[英]Getting JSON parsing error (MismatchedInputException) in Spring Rest Controller
我对 Spring 很陌生。 在 Postman 中尝试 POST 方法时出现 JSON 解析错误。 基本上,我有一个类,我想以列表的形式调用另一个类。
我有一个用于类的抽象实体,然后我有一个标签类;
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
public class Tag extends AbstractEntity {
@Column (nullable = false)
private String tag;
我有一个问题课:
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
public class Question extends AbstractEntity {
@Column (nullable = false)
private String title;
@Column (nullable = false)
private String content;
@OneToMany
@Column (nullable = false)
private List<Tag> tag;
这是我的控制器:
@RestController
@RequestMapping("v1/enquiry")
public class EnquiryController {
@Autowired
private QuestionRepository questionRepository;
@PostMapping
public ResponseEntity<Question> createEnquiry(@RequestBody Question question) {
if (question.getTitle() == null | question.getContent() == null) {
throw new BadRequest("Please fill in the required fields!");
}
Question enq = questionRepository.save(question);
return ResponseEntity.ok().body(enq);
}
当我执行 POST 方法时:
{
"title": "question",
"content": "cogito",
"tag": ["java", "rest"]
}
我收到以下错误。 我非常尝试针对周围发布的类似条件提出的所有建议。 他们都没有工作。 我究竟做错了什么?
"message": "JSON 解析错误:无法构造
com.mockup.mockupapi.model.Tag
实例(尽管至少存在一个 Creator):没有从字符串值('java')反序列化的字符串参数构造函数/工厂方法;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.mockup.mockupapi.model.Tag
实例(尽管至少存在一个 Creator):没有从字符串值反序列化的字符串参数构造函数/工厂方法('java')\\n at [Source: (PushbackInputStream); line: 4, column: 10](通过参考链:com.mockup.mockupapi.model.Question[\\"tag\\"]->java.util。数组列表[0])",
解决了
感谢评论中的线索,我更改了 JSON 中的数组格式,并将CascadeType
添加到OneToMany
调用中。 我使用了.PERSIST
,但是, .ALL
也有效。
JSON 格式:
{
"title": "question",
"content": "cogito",
"tag": [{"tag":"java"},{"tag": "rest"}]
}
问题类:
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
public class Question extends AbstractEntity {
@Column (nullable = false)
private String title;
@Column (nullable = false)
private String content;
@OneToMany(cascade = CascadeType.PERSIST)
@Column (nullable = false)
private List<Tag> tag;
请更改您的 JSON 结构。
{ "title": "question", "content": "cogito", "tag": [{"tag":"java"},{"tag": "rest"}] }
还要在您的映射中添加级联。
@OneToMany (cascade = CascadeType.ALL)
@Column (nullable = false)
private List<Tag> tag;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.