Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据Rest:RepositoryRestController从URI反序列化无效_Java_Spring_Jackson_Spring Data_Spring Data Rest - Fatal编程技术网

Java Spring数据Rest:RepositoryRestController从URI反序列化无效

Java Spring数据Rest:RepositoryRestController从URI反序列化无效,java,spring,jackson,spring-data,spring-data-rest,Java,Spring,Jackson,Spring Data,Spring Data Rest,我的问题是从URI字符串反序列化实体。 当我使用由Spring数据Rest生成的HTTP接口时,一切正常。 我可以针对我的端点/api/shoppingLists发布以下JSON,它将被反序列化为一个以admin为所有者的购物列表 { "name":"Test", "owners":["http://localhost:8080/api/sLUsers/admin"] } 当我使用自定义RepositoryRestController时,这不再起作用。如果我将完全相同的JSON发布到

我的问题是从URI字符串反序列化实体。 当我使用由Spring数据Rest生成的HTTP接口时,一切正常。 我可以针对我的端点
/api/shoppingLists
发布以下JSON,它将被反序列化为一个以admin为所有者的购物列表

{
  "name":"Test", 
  "owners":["http://localhost:8080/api/sLUsers/admin"]
}

当我使用自定义RepositoryRestController时,这不再起作用。如果我将完全相同的JSON发布到相同的端点,我会得到这个响应

{
  "timestamp" : "2015-11-15T13:18:34.550+0000",
  "status" : 400,
  "error" : "Bad Request",
  "exception" : "org.springframework.http.converter.HttpMessageNotReadableException",
  "message" : "Could not read document: Can not instantiate value of type [simple type, class de.yannicklem.shoppinglist.core.user.entity.SLUser] from String value ('http://localhost:8080/api/sLUsers/admin'); no single-String constructor/factory method\n at [Source: java.io.PushbackInputStream@9cad4d2; line: 1, column: 26] (through reference chain: de.yannicklem.shoppinglist.core.list.entity.ShoppingList[\"owners\"]->java.util.HashSet[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class de.yannicklem.shoppinglist.core.user.entity.SLUser] from String value ('http://localhost:8080/api/sLUsers/admin'); no single-String constructor/factory method\n at [Source: java.io.PushbackInputStream@9cad4d2; line: 1, column: 26] (through reference chain: de.yannicklem.shoppinglist.core.list.entity.ShoppingList[\"owners\"]->java.util.HashSet[0])",
  "path" : "/api/shoppingLists"
}
我的RepositoryRestController:

@RepositoryRestController
@ExposesResourceFor(ShoppingList.class)
@RequiredArgsConstructor(onConstructor = @__(@Autowired ))
public class ShoppingListRepositoryRestController {

  private final ShoppingListService shoppingListService;

  private final CurrentUserService currentUserService;

  @RequestMapping(method = RequestMethod.POST, value = ShoppingListEndpoints.SHOPPING_LISTS_ENDPOINT)
  @ResponseBody
  @ResponseStatus(HttpStatus.CREATED)
  public PersistentEntityResource postShoppingList(@RequestBody ShoppingList shoppingList,
    PersistentEntityResourceAssembler resourceAssembler) {

    if (shoppingListService.exists(shoppingList)) {
        shoppingListService.handleBeforeSave(shoppingList);
    } else {
        shoppingListService.handleBeforeCreate(shoppingList);
    }

    return resourceAssembler.toResource(shoppingListService.save(shoppingList));
  }
}
有谁能告诉我为什么反序列化不再适用于定制的RepositoryRestController(由用户建议)

要利用SpringDataREST的设置、消息转换器、异常处理等,请使用@RepositoryRestController注释,而不是标准的SpringMVC@Controller或@RestController


有关完整的源代码,请查看

为了使用HAL MessageConverter,您应该有一个资源作为参数。尝试将代码更改为:

 public PersistentEntityResource postShoppingList(@RequestBody Resource<ShoppingList> shoppingList)
公共PersistentEntityResource postShoppingList(@RequestBody Resource shoppingList)

在我的例子中,问题是pojo中的字段名和json字段之间存在差异。i、 e:

@Entity
public class Pojo{

   @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
   @JoinColumn(name = "fk_myother")
   public Other myOther;
...etc
}

POST -> /dao/pojos
{
   "myother":"http://localhost:8034/dao/others/50"
}
请注意,json字段应改为“myOther


希望这对其他人有所帮助。

您找到解决上述问题的方法了吗?我也面临同样的问题。很遗憾,不,抱歉:(MH,所以还在等待解决方案;)当我问这个问题时,一个购物列表扩展了资源支持