使用 Spring 数据 Rest 手动将 JSON 转换为对象

Manually convert JSON to Object using Spring Data Rest

假设我有以下实体:

public class Employee {

  private String name;
  private Company company

}

我有一个包含以下内容的字符串:

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

Spring Data Rest 能够立即将此 JSON 转换为 Employee 对象,但如何手动转换?

@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);
}

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

所以我做了一些逆向工程,我想我已经找到了你需要的东西。好在内部使用的ObjectMapper在RepositoryRestMvcConfigurationclass中有一个publicgetter,所以用起来很方便:

/**
 * 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);
}