java - Spring Controller - 将 JSON 属性映射到外键实体

标签 java json spring spring-boot jpa

用户 Controller .java

@RestController
@RequestMapping("/users")
public class UserController {
    // code
    @PostMapping("/sign-up")
    public void signUp(@RequestBody User user) {
        //code
    }
}

用户

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private long id;

    @ManyToOne
    @JoinColumn(name = "language_id")
    private Language language;

    // others
    public User() {
    }
}

因此,如您所见,语言 是一个独立的实体。但我希望能够发送以下 JSON 结构

{
    "foreName" : "bla",
    "sureName" : "blo",
    "language" : "1"
}

但是我收到以下错误

Cannot construct instance of entity.db.user.Language (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('1');

我是否需要通过过滤器来预先获取 Language 实体?是否有强制解析方法的形式?在这里正确执行的方法是什么?

最佳答案

创建一个新的 DTO 对象,比如 UserDTO,作为 API 方法中的请求主体。处理 DTO 以形成用户实体,以进一步进行。

关于java - Spring Controller - 将 JSON 属性映射到外键实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775990/

相关文章:

java - 为什么它不会从集合中删除?

java - 使用 0xFF 而不是 0xFFFFFFFF 进行字节初始化

java - 如何用 spring batch 解析 json 文件?

C# 数据表到 Json?

带有列表的 Spring @Cacheable 方法

java - 尝试使用 MockMvc 进行测试而不上传任何文件时出现 "The current request is not a multipart request"

java - Intellij 建议无效

java - 防止 Jackson ObjectMapper 自动使用 toString() 格式化复合映射键

json - 语法错误: Unexpected end of input in Angular 5 service

java - 什么是 spring-boot-configuration-processor ?为什么人们将图书馆排除在外?为什么它在依赖树中不可见?