如何在 spring 引导项目中为 Unirest 配置 ObjectMapper
How to configure the ObjectMapper for Unirest in a spring boot project
我在一个适合我的项目中使用 Unirest。但是,我想要 post 一些数据并且不想转义所有 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 引导 API 项目中最好在哪里执行此操作。
我试图在主 class 方法中设置它,但我收到 '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 项目中使用 Jackson 对象映射器和 Unirest,因为我已经谷歌搜索和阅读文档两天了。非常感谢您的帮助。
提前致谢
这里有几个问题:
- 您使用的 unirest 版本 (
1.4.5
) 不包含配置对象映射器的功能。此功能是后来添加的 (github PR)。所以你应该更新到 maven central - 1.4.9
上可用的最新版本。仅此一项就可以解决您的编译问题。
- 您可以将您的 Unirest 配置代码保留在 main 方法中。然而,如果你不想使用默认的 jackson
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(...)
我在一个适合我的项目中使用 Unirest。但是,我想要 post 一些数据并且不想转义所有 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 引导 API 项目中最好在哪里执行此操作。
我试图在主 class 方法中设置它,但我收到 '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 项目中使用 Jackson 对象映射器和 Unirest,因为我已经谷歌搜索和阅读文档两天了。非常感谢您的帮助。
提前致谢
这里有几个问题:
- 您使用的 unirest 版本 (
1.4.5
) 不包含配置对象映射器的功能。此功能是后来添加的 (github PR)。所以你应该更新到 maven central -1.4.9
上可用的最新版本。仅此一项就可以解决您的编译问题。 - 您可以将您的 Unirest 配置代码保留在 main 方法中。然而,如果你不想使用默认的 jackson
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(...)