iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解决springboot整合cxf-jaxrs中json转换的问题
  • 548
分享到

如何解决springboot整合cxf-jaxrs中json转换的问题

2023-06-20 14:06:06 548人浏览 八月长安
摘要

本篇内容主要讲解“如何解决SpringBoot整合cxf-jaxrs中JSON转换的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决springboot整合cxf-jaxrs中json

本篇内容主要讲解“如何解决SpringBoot整合cxf-jaxrs中JSON转换的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决springboot整合cxf-jaxrs中json转换的问题”吧!

前言

我在将项目用boot重构时, 关于cxf的使用出了一些问题, 主要在实体类和json转换这一方面。

在看了一些晚上的相关答案后, 了解到jaxb默认支持xml格式, 而实现对象转json是需要额外的转换器的,然后在stackoverflow上找到一个解决方法是声明一个bean,注入JsonProvider,但我发现这个可以解决服务端将对象转为json的问题,

而客户端还是会报一个异常:

No message body reader has been found for class ......, ContentType: application/json

后面在cxf的WEBClient类的源码中发现:

create()方法有很多重载方法,其中有一个是可以指定provider来转换格式,最后通过这个重载方法解决了客户端json格式转换问题。

如何解决springboot整合cxf-jaxrs中json转换的问题

最后的解决方案:

在单独使用cxf的基础上做出改动,主要有两方面

服务端:在启动类上声明一个bean, 注入JacksonJaxbJsonProvider

客户端:在WebClient调用create()方法时,指定转json的provider

下面是一个简单的demo:

一、webservice服务端(生产者)

1.Maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--cxf-jaxrs-starter--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxrs</artifactId><version>3.2.0</version></dependency><!--jaxrs转json工具--><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-json-provider</artifactId><version>2.8.5</version></dependency>
2.application.yml配置文件

配置cxf路径和包扫描

server:  port: 9001cxf:  path: /services  servlet.init:    service-list-path: /info  jaxrs:    component-scan: true
3.boot应用启动类配置

在启动类中声明一个bean,自动注入JacksonJaxbJsonProvider 对象,这样cxf在将对象转为json时会自动使用这个对象

@SpringBootApplicationpublic class CxfServerApplication { public static void main(String[] args) {SpringApplication.run(CxfServerApplication.class, args);} // 配置一个对象与json转换的工具@Beanpublic JacksonJaxbJsonProvider jacksonJaxbJsonProvider() {return new JacksonJaxbJsonProvider();}}
4.客户服务接口

关于cxf的路径注解,请参照其他cxf资料

@Path("/customerService")public interface CustomerService {         @Path("/findById")    @GET    @Produces({"application/xml", "application/json"})    Customer findById(@QueryParam("id")Integer id);}
5.客户服务实现类

一个简单的实现类, 不需要加额外注解, 注入dao从数据库查询数据返回(dao层代码未贴出, 可自行实现)。

@Service@Transactionalpublic class CustomerServiceImpl implements CustomerService {     @Autowired    private CustomerDao customerDao;     @Override    public Customer findById(Integer id) {        // 调用dao, 从数据库查询客户        return customerDao.findById(id);    }}

二、webservice客户端(消费者)

1.maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--cxf-jaxrs-starter--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxrs</artifactId><version>3.2.0</version></dependency><!--jaxrs转json工具--><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-json-provider</artifactId><version>2.8.5</version></dependency>
2.配置转json工具

由于WebClient的create()方法需要的是List<Provider>形式的参数,所以创建一个继承ArrayList类的JsonProvider,在构造方法中添加JacksonJaxbJsonProvider对象元素

@Componentpublic class JsonProvider extends ArrayList<JacksonJaxbJsonProvider> {        // 在构造方法中, 添加JacksonJaxbJsonProvider    public JsonProvider(){        this.add(new JacksonJaxbJsonProvider());    }}
3.使用WebClient调用webservice服务

在Controller内注入上面创建的自定义的JsonProvider,并在WebClient调用create()方法时,作为方法参数注入,以此达到手动指定json转换器的目的

@Controllerpublic class CustomerController {     // 注入配置的转json工具    @Autowired    private List<JacksonJaxbJsonProvider> jsonProvider;     @RequestMapping("/customer_findById")    @ResponseBody    public List<Customer> findById(Integer id) {        //调用webservice获取查询数据        Customer customer = WebClient                .create("Http://localhost:9001/services/customerService/findById?id="+id, jsonProvider)                .accept(MediaType.APPLICATION_JSON).get(Customer.class);        return customer;    }}

三、其他注意

1.需要用xml/json格式转换后传输的实体类要在类名上加一个注解
@XmlRootElement(name = "xxx")
2.上面demo使用的cxf-spring-boot-starter-jaxrs版本为3.2.0

在3.2.1以后的版本需要手动配置ViewResolver

否则会报错:

@ConditionalOnProperty(spring.mvc.locale) did not find property 'locale' (OnPropertyCondition)

到此,相信大家对“如何解决springboot整合cxf-jaxrs中json转换的问题”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何解决springboot整合cxf-jaxrs中json转换的问题

本文链接: https://www.lsjlt.com/news/297666.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解决springboot整合cxf-jaxrs中json转换的问题
    前言 我在将项目用boot重构时, 关于cxf的使用出了一些问题, 主要在实体类和json转换这一方面。 在看了一些晚上的相关答案后, 了解到jaxb默认支持xml格式, 而实现对象...
    99+
    2024-04-02
  • 如何解决springboot整合cxf-jaxrs中json转换的问题
    本篇内容主要讲解“如何解决springboot整合cxf-jaxrs中json转换的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决springboot整合cxf-jaxrs中json...
    99+
    2023-06-20
  • 解决springboot整合cxf启动报错,原因是版本问题
    springboot整合cxf启动报错 错误信息如下 [DEBUG] 2021-01-26 11:28:47,848 [main] org.springframework.boo...
    99+
    2024-04-02
  • 如何解决SpringBoot整合RocketMQ遇到的问题
    本篇内容主要讲解“如何解决SpringBoot整合RocketMQ遇到的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决SpringBoot整合RocketMQ遇到的问题”吧!应用场景...
    99+
    2023-06-20
  • 如何解决SpringBoot整合thymeleaf报错的问题
    这篇文章主要讲解了“如何解决SpringBoot整合thymeleaf报错的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决SpringBoot整合thymeleaf报错的问题”吧...
    99+
    2023-06-20
  • SpringBoot整合Mybatis,解决TypeAliases配置失败的问题如何解决
    本篇内容主要讲解“SpringBoot整合Mybatis,解决TypeAliases配置失败的问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot整合Mybatis,解...
    99+
    2023-06-20
  • 解决SpringBoot整合ElasticSearch遇到的连接问题
    SpringBoot整合ElasticSearch的连接问题 failed to load elasticsearch nodes : org.elasticsearch.clie...
    99+
    2024-04-02
  • SpringBoot整合Mybatis,解决TypeAliases配置失败的问题
    问题描述 在应用MyBatis时,使用对象关系映射,将对象和Aliase映射起来。 在Mybatis的文档明确写出,如果你没有明确定义实体类的Aliase,框架会自动将Class N...
    99+
    2024-04-02
  • 怎么解决springBoot整合Eureka启动失败的问题
    这篇文章主要介绍“怎么解决springBoot整合Eureka启动失败的问题”,在日常操作中,相信很多人在怎么解决springBoot整合Eureka启动失败的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • 如何解决Hbase、elasticsearch整合中jar包冲突的问题
    这篇文章主要介绍了如何解决Hbase、elasticsearch整合中jar包冲突的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题背景再数据平台中,项目搭建需要使用e...
    99+
    2023-05-30
    hbase elasticsearch jar
  • thinkphp路由不转换问题如何解决
    这篇文章主要介绍“thinkphp路由不转换问题如何解决”,在日常操作中,相信很多人在thinkphp路由不转换问题如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”thinkphp路由不转换问题如何解决...
    99+
    2023-07-05
  • SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题
    这篇“SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-07-02
  • SpringBoot如何整合ES解析搜索返回字段问题
    这篇文章主要讲解了“SpringBoot如何整合ES解析搜索返回字段问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot如何整合ES解析搜索返回字段问题”吧!1. 数据构造...
    99+
    2023-07-06
  • SpringBoot整合kafka遇到的版本不对应问题及解决
    目录SpringBoot整合kafka遇到版本不对应如果你的SpringBoot是2.0.3版本如果你的SpringBoot比较新,用的2.1.0版本SpringBoot整合kafk...
    99+
    2024-04-02
  • SpringBoot详解整合MyBatis过程中可能遇到的问题
    尽量不要用 jUnit 提供的单元测试 提一个要求尽量使用SpringBoot 提供的测试类进行测试,能够自动扫描组件以及使用容器中的bean对象 还有如果有组件 中存在注入对象的话...
    99+
    2024-04-02
  • springBoot中shiro的302跳转问题怎么解决
    本篇内容介绍了“springBoot中shiro的302跳转问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springBoot前...
    99+
    2023-06-22
  • 如何解决java转义json出现\u0000 等乱码的问题
    这篇文章主要讲解了“如何解决java转义json出现\u0000 等乱码的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决java转义json出现\u0000 等乱码的问题”吧!今...
    99+
    2023-06-14
  • 分析和解决golang中interface转换的问题
    随着人们对于Golang语言的应用越来越深入,对于其中的一些特性和技术也有了更深入的认识。其中,golang中的interface是一项非常重要且强大的特性,具有很大的灵活性和可扩展性。在实际应用中,我们不可避免地需要使用interface...
    99+
    2023-05-14
  • 如何分析springboot响应式编程整合webFlux的问题
    这期内容当中小编将会给大家带来有关如何分析springboot响应式编程整合webFlux的问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在servlet3.0标准之前,是每一个请求对应一个线程。如果...
    99+
    2023-06-29
  • 如何使用Easyui ueditor整合解决不能编辑的问题
    这篇文章主要介绍了如何使用Easyui ueditor整合解决不能编辑的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。<scrip...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作