繁体   English   中英

在 Spring Rest Controller 中获取 JSON 解析错误 (MismatchedInputException)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM