使用Spring Data Rest手动将JSON转换为Object

问题描述 投票:1回答:2

假设我有以下实体:

public class Employee {

  private String name;
  private Company company

}

我有一个字符串,内容如下:

{
  "name":"Joe",
  "company": "http://localhost/companies/23"
}

Spring Data Rest能够将此JSON转换为开箱即用的Employee对象,但是如何将其手动转换?

spring-data-rest
2个回答
1
投票

好。我想我现在明白了这个问题。当然,SDR必须有一个ObjectMapper,它能够将传入的JSON转换为实体(包括hateoas链接),但它似乎不是默认的ObjectMapper,它甚至不会被导出为Bean。

所以我做了一些逆向工程,我想我已经找到了你需要的东西。幸运的是,内部使用的ObjectMapper在getter类中有一个公共RepositoryRestMvcConfiguration,因此可以很容易地使用它:

/**
 * The Jackson {@link ObjectMapper} used internally.
 *
 * @return
 */
public ObjectMapper objectMapper() {
    return mapper.get();
}

我认为以下代码将起作用:

@Autowired
RepositoryRestMvcConfiguration rrmc;

private <T> T readValue(String json, Class<T> type) 
    throws IOException, JsonParseException, JsonMappingException {
  return rrmc.objectMapper().readValue(json, type);
}

0
投票
@Aurowired
private final RepositoryInvokerFactory repositoryInvokerFactory;

private Object loadPropertyValue(Class<?> type, String href) {
  String id = href.substring(href.lastIndexOf('/') + 1);
  RepositoryInvoker invoker = repositoryInvokerFactory.getInvokerFor(type);
  return invoker.invokeFindById(id).orElse(null);
}
© www.soinside.com 2019 - 2024. All rights reserved.