首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在spring引导项目中为Unirest配置ObjectMapper

如何在spring引导项目中为Unirest配置ObjectMapper
EN

Stack Overflow用户
提问于 2019-11-19 14:18:31
回答 1查看 5.7K关注 0票数 0

我在一个项目中使用Unirest,这个项目对我来说很好。但是,我想发布一些数据,并且不想逃避所有的JSON,因为它看起来很难看,而且非常痛苦。

我找到了一些关于如何为Unirest配置ObjectMapper的链接,它给出了以下代码。

代码语言:javascript
复制
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项目中最好这样做。

我试图在主类方法中设置它,但是我得到了一个'setObjectMapper‘无法解决的错误。我也试图在控制器中这样做,但是我得到了同样的错误。

我对这两个库的评分是:

代码语言:javascript
复制
// 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项目中使用带有Unirest的Jackson对象映射器,因为我已经谷歌和阅读文档两天了。会很感激你的帮助。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 15:17:54

您在这里有几个问题:

  1. 您使用的unirest版本(1.4.5)不包含配置对象映射程序的特性。这个特性是后来添加的(github PR)。因此,您应该更新到maven central - 1.4.9提供的最新版本。这本身将解决您的编译问题。
  2. 可以将Unirest配置代码保留在主方法中。但是,如果您想使用的不是默认的jackson ObjectMapper(),而是spring上下文中的一个,那么最好创建一个类似假spring的东西来注入ObjectMapper:
代码语言:javascript
复制
@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可能已经改变了。

Upd:最新版本

代码语言:javascript
复制
compile group: 'com.konghq', name: 'unirest-java', version: '3.1.04'

新的API是Unirest.config().setObjectMapper(...)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58936138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档