提问者:小点点

在Spring启动应用程序中将数据存储到数据库的问题


我在使用 post request 将数据保存到 spring 启动应用程序中的数据库时出现错误。我在类之间有多对多映射。从数据库获取数据时我没有问题,但是当我尝试将数据保存到数据库时,出现此错误。

2018-06-26 12:19:32.016  WARN 3156 --- [nio-8080-exec-1] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class com.greydelta.entity.Permission]]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (java.util.List) not compatible with managed type (com.greydelta.entity.Role)
2018-06-26 12:19:32.018  WARN 3156 --- [nio-8080-exec-1] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class com.greydelta.entity.Permission]]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (java.util.List) not compatible with managed type (com.greydelta.entity.Role)

我在父实体类和子实体类中使用@JsonManagedReference@JsonBackReference

以下是我的mappings Child类:

    // test this mapping
@ManyToMany(mappedBy="permissions",
        cascade={ CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
@JsonBackReference
private List<Role> roles;

父级类:

    // test this mapping
@ManyToMany(fetch = FetchType.EAGER,
        cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
@JoinTable( name="role_permission",
            joinColumns= {@JoinColumn(name="role_id")},
            inverseJoinColumns= {@JoinColumn(name="permission_id")})
@JsonManagedReference
private List<Permission> permissions; // create getter/setter

更新:

以下是用户发送POST请求以创建角色的URL:localhost:8080/roles

以下是我在《邮差》得到的回复:

{
    "timestamp": "2018-06-26T08:18:03.167+0000",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/json;charset=UTF-8' not supported",
    "path": "/roles"
}

这是控制器方法:

@PostMapping("/roles")
public void createRole(@RequestBody Role theRole) {     

    roleService.createRole(theRole);

}

共1个答案

匿名用户

我通过删除@JsonManagedReference解决了这个问题。如果有两个以上的实体映射在一起,则需要删除每个实体类中的@JsonManagedReference。我在这里找到了这个解决方案:

Spring REST,JSON“无法处理托管/反向引用”defaultReference“”415不支持的媒体类型。

我希望这有帮助。