我在一个对我来说很好的项目中使用Unirest。但是,我想发布一些数据,并且不想转义所有JSON,因为它看起来很丑,而且很麻烦。
我找到了一些有关如何为Unirest配置ObjectMapper的链接,并提供了此代码。
Unirest.setObjectMapper(new ObjectMapper() {
com.fasterxml.jackson.databind.ObjectMapper mapper =
new com.fasterxml.jackson.databind.ObjectMapper();
public String writeValue(Object value) {
try {
return mapper.writeValueAsString(value);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public <T> T readValue(String value, Class<T> valueType) {
try {
return mapper.readValue(value, valueType);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
但是,没有示例显示在Spring Boot API项目中最好的位置。
我试图在主类方法中进行设置,但是遇到一个错误,提示“ setObjectMapper”无法解析。我也尝试在控制器中执行此操作,但出现相同的错误。
这两个库的我的Gradle部门是:
// https://mvnrepository.com/artifact/com.mashape.unirest/unirest-java
compile group: 'com.mashape.unirest', name: 'unirest-java', version: '1.4.5'
compile 'com.fasterxml.jackson.core:jackson-databind:2.10.1'
任何人都可以向我展示如何在Spring Boot API项目中与Unirest一起使用Jackson对象映射器,因为我已经谷歌搜索和阅读文档两天了。希望能有所帮助。
提前谢谢
答案 0 :(得分:1)
您在这里遇到几个问题:
1.4.5
不包含用于配置对象映射器的功能。稍后添加了此功能(github PR)。因此,您应该更新到maven Central上可用的最新版本-1.4.9
。仅此一项就可以解决您的编译问题。ObjectMapper()
,而是要使用spring上下文中的杰克逊,那么最好创建一个类似假冒的spring bean的东西来注入ObjectMapper:@Configuration
public class UnirestConfig {
@Autowired
private com.fasterxml.jackson.databind.ObjectMapper mapper;
@PostConstruct
public void postConstruct() {
Unirest.setObjectMapper(new ObjectMapper() {
public String writeValue(Object value) {
try {
return mapper.writeValueAsString(value);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public <T> T readValue(String value, Class<T> valueType) {
try {
return mapper.readValue(value, valueType);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
}
除此以外,该库还更改了程序包名称。现在是com.konghq。您可能要考虑更新,但是库API可能已更改。
更新:获取最新版本
compile group: 'com.konghq', name: 'unirest-java', version: '3.1.04'
新的API为Unirest.config().setObjectMapper(...)