Cannot deserialize instance of a HashSet

huangapple go评论103阅读模式
英文:

Cannot deserialize instance of a HashSet

问题

我创建了这个Json对象:

  1. {
  2. "firstName":"John",
  3. "organizations":[
  4. {
  5. "name":"ACME inc.",
  6. "sector":{
  7. "sectors":{
  8. "name":"Technologies vertes"
  9. }
  10. }
  11. }
  12. ]
  13. }

这个Json对象应该与以下模型类匹配:

  1. @Getter @Setter
  2. public class UserDetailsRequestModel {
  3. private String firstName;
  4. private Set<OrganizationRequestModel> organizations;
  5. }
  6. @Getter @Setter
  7. public class OrganizationRequestModel {
  8. private String name;
  9. private SectorRequestModel sector;
  10. }
  11. @Getter @Setter
  12. public class SectorRequestModel {
  13. private Set<SectorLangRequestModel> sectors;
  14. }
  15. @Getter @Setter
  16. public class SectorLangRequestModel {
  17. private String name;
  18. }

对于我的REST API,我为用户创建创建了一个UserController:

  1. public UserRestResponseModel createUser(@RequestBody UserDetailsRequestModel userDetails) {
  2. log.info("createUser() called");
  3. UserRestResponseModel returnValue;
  4. ModelMapper modelMapper = new ModelMapper();
  5. modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
  6. UserDto userDto = modelMapper.map(userDetails, UserDto.class);
  7. UserDto createdUser = userService.createUser(userDto);
  8. returnValue = modelMapper.map(createdUser, UserRestResponseModel.class);
  9. return returnValue;
  10. }

在我添加了sector字段之后,我的用户创建正常工作。即使使用调试器,我仍然得到一个错误消息:

  1. JSON parse error: Cannot deserialize instance of `java.util.HashSet<eu.valoreo.app.ui.model.request.obj.SectorLangRequestModel>` out of START_OBJECT token; nested exception is
  2. com.fasterxml.jackson.databind.exc.MismatchedInputException
  3. at [Source: (PushbackInputStream); line: 31, column: 23] (through reference chain: eu.valoreo.app.ui.model.request.UserDetailsRequestModel["organizations"]->java.util.HashSet[0]->eu.valoreo.app.ui.model.request.obj.OrganizationRequestModel["sector"]->eu.valoreo.app.ui.model.request.obj.SectorRequestModel["sectors"])]

我真的不明白问题出在哪里。我的Json对象看起来是正确的。

英文:

I created this Json object:

  1. {
  2. &quot;firstName&quot;:&quot;John&quot;,
  3. &quot;organizations&quot;:[
  4. {
  5. &quot;name&quot;:&quot;ACME inc.&quot;,
  6. &quot;sector&quot;:{
  7. &quot;sectors&quot;:{
  8. &quot;name&quot;:&quot;Technologies vertes&quot;
  9. }
  10. }
  11. }
  12. ]
  13. }

This Json object should match with those model classes :

  1. @Getter @Setter
  2. public class UserDetailsRequestModel {
  3. private String firstName;
  4. private Set&lt;OrganizationRequestModel&gt; organizations;
  5. }

My OrganizationRequestModel class :

  1. @Getter @Setter
  2. public class OrganizationRequestModel {
  3. private String name;
  4. private SectorRequestModel sector;
  5. }

My SectorRequestModel:

  1. @Getter @Setter
  2. public class SectorRequestModel {
  3. private Set&lt;SectorLangRequestModel&gt; sectors;
  4. }

Finally :

  1. @Getter @Setter
  2. public class SectorLangRequestModel {
  3. private String name;
  4. }

For my rest API, i created a UserController for user creation:

  1. public UserRestResponseModel createUser(@RequestBody UserDetailsRequestModel userDetails) {
  2. log.info(&quot;createUser() called&quot;);
  3. UserRestResponseModel returnValue;
  4. ModelMapper modelMapper = new ModelMapper();
  5. modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
  6. UserDto userDto = modelMapper.map(userDetails, UserDto.class);
  7. UserDto createdUser = userService.createUser(userDto);
  8. returnValue = modelMapper.map(createdUser, UserRestResponseModel.class);
  9. return returnValue;
  10. }

My user creation was working fine until I added the sector. Even with debugger I obtain an error message:

  1. JSON parse error: Cannot deserialize instance of `java.util.HashSet&lt;eu.valoreo.app.ui.model.request.obj.SectorLangRequestModel&gt;` out of START_OBJECT token; nested exception is
  2. com.fasterxml.jackson.databind.exc.MismatchedInputException
  3. at [Source: (PushbackInputStream); line: 31, column: 23] (through reference chain: eu.valoreo.app.ui.model.request.UserDetailsRequestModel[&quot;organizations&quot;]-&gt;java.util.HashSet[0]-&gt;eu.valoreo.app.ui.model.request.obj.OrganizationRequestModel[&quot;sector&quot;]-&gt;eu.valoreo.app.ui.model.request.obj.SectorRequestModel[&quot;sectors&quot;])]

I don't really understand where is the problem. My Json object looks correct

答案1

得分: 2

好的,以下是您要翻译的内容:

似乎我的 JSON 不正确:

  1. "sector": {
  2. "sectors": [{
  3. "name": "Technologies vertes"
  4. }]
  5. }
英文:

It seems that my Json was not correct:

  1. &quot;sector&quot;:{
  2. &quot;sectors&quot;:[{
  3. &quot;name&quot;:&quot;Technologies vertes&quot;
  4. }]
  5. }

huangapple
  • 本文由 发表于 2020年10月26日 08:18:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/64530131.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定