如何在春季启动项目中为Unirest配置ObjectMapper

时间:2019-11-19 14:18:31

标签: spring-boot unirest

我在一个对我来说很好的项目中使用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对象映射器,因为我已经谷歌搜索和阅读文档两天了。希望能有所帮助。

提前谢谢

1 个答案:

答案 0 :(得分:1)

您在这里遇到几个问题:

  1. 您使用的unirest版本(1.4.5不包含用于配置对象映射器的功能。稍后添加了此功能(github PR)。因此,您应该更新到maven Central上可用的最新版本-1.4.9。仅此一项就可以解决您的编译问题。
  2. 您可以在主要方法中保留Unirest配置代码。但是,如果您不希望使用默认的杰克逊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(...)