无法从 START_OBJECT 令牌中反序列化 `java.lang.Long` 的实例;在 Spring Boot 帖子上
Posted
技术标签:
【中文标题】无法从 START_OBJECT 令牌中反序列化 `java.lang.Long` 的实例;在 Spring Boot 帖子上【英文标题】:Cannot deserialize instance of `java.lang.Long` out of START_OBJECT token; on Spring boot post 【发布时间】:2021-03-02 06:28:35 【问题描述】:我想从我的 Angular 应用程序向我的 Spring Boot 后端发布一个新游戏。 我是通过 Angular 的一篇文章来做到这一点的。该游戏与我在 Spring Boot JPA 中的用户实体有关系。但是当我发布我的帖子时,我在控制台中收到一个 400 错误代码,上面写着:
"MethodArgumentNotValidException","fieldErrors":["field":"user","errorCode":"NotNull"]
这是我帖子中的数据:
category: "sport", sessieId: 20004, userID: 10004, score: null
我的游戏controller
:
@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping(value = "/api/games", produces = MediaType.APPLICATION_JSON_VALUE)
public class GameController
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Long createGame(@RequestBody @Valid final GameDTO gameDTO)
return gameService.create(gameDTO);
// more methods for http
我的游戏domain
:
@Entity
public class Game
@Id
@Column(nullable = false, updatable = false)
@SequenceGenerator(name = "primary_sequence", sequenceName = "primary_sequence",
allocationSize = 1, initialValue = 10000)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "primary_sequence")
private Long id;
@Column(nullable = false)
private Integer sessieId;
@Column(nullable = false)
private String category;
@Column
private String score;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
我的游戏DTO
:
public class GameDTO
private Long id;
@NotNull
private Integer sessieId;
@NotNull
@Size(max = 255)
private String category;
@Size(max = 255)
private String score;
@NotNull
private Long user;
我的游戏service
中的create方法:
public Long create(final GameDTO gameDTO)
final Game game = new Game();
mapToEntity(gameDTO, game);
return gameRepository.save(game).getId();
所以我看到游戏实体期望用户很长,所以我尝试在游戏帖子中发布对象用户。 帖子正文:
category: "sport", sessieId: 20004,…
category: "sport"
score: null
sessieId: 20004
user: id: 10004, firstName: "test5", lastName: "test5", email: "test5@test.nl", password: "test"
然后我得到以下错误:
JSON 解析错误:无法从 START_OBJECT 令牌中反序列化
java.lang.Long
的实例;
我需要在帖子中传递用户对象吗?那么我该如何解决这个错误呢?
【问题讨论】:
id: 10004, ...
不是有效的 JSON。键需要引用
【参考方案1】:
GameDTO 类中用户的类型不正确。它是“Long”类型,但post json中的“用户”是一个对象。
public class GameDTO
private Long id;
@NotNull
private Integer sessieId;
@NotNull
@Size(max = 255)
private String category;
@Size(max = 255)
private String score;
@NotNull
private User user;
【讨论】:
以上是关于无法从 START_OBJECT 令牌中反序列化 `java.lang.Long` 的实例;在 Spring Boot 帖子上的主要内容,如果未能解决你的问题,请参考以下文章
无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例
无法读取文档:无法从 START_OBJECT 令牌中反序列化 java.lang.String 的实例
JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 `byte[]` 的实例
JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从 START_OBJECT 令牌中反序列化 `java.util.Arra
无法从 START_OBJECT 令牌中反序列化 `java.lang.Long` 的实例;在 Spring Boot 帖子上