如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml?

2023-11-26

我有一个工作的 Spring Boot 应用程序,它使用 JSON 作为交换数据格式。现在我必须添加一个仅以 xml 形式发送数据的服务。我添加了jackson-dataformat-xml到我的 pom ,效果很好。

@Service
public class TemplateService {

    private final RestTemplate restTemplate;
    private final String serviceUri;

    public TemplateService (RestTemplate restTemplate, @Value("${service.url_templates}") String serviceUri) {
        this.restTemplate = restTemplate;
        this.serviceUri = serviceUri;
    }

    public boolean createTemplate(Template template) {
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML));
        headers.setContentType(MediaType.APPLICATION_XML);
        HttpEntity entity = new HttpEntity<>(template, headers);
        ResponseEntity<Template> response = restTemplate.exchange(serviceUri, HttpMethod.POST, entity, Template.class);
        if (response.getStatusCode().is2xxSuccessful()) {
            // do some stuff
            return true;
        }
        return false;
    }
}

现在不幸的是,添加依赖项后,我的所有其他 POST 方法都默认发送 XML。或者Content被设定为application/xml.但是我想要这里有JSON。

@Service
public class SomeOtherService{

    private final RestTemplate restTemplate;
    private final String anotherUri;

    public SomeOtherService(RestTemplate restTemplate, @Value("${anotherUri.url}") String anotherUri) {
        this.restTemplate = restTemplate;
        this.anotherUri = anotherUri;
    }

    public ComponentEntity doSomething(String projectId, MyNewComponent newComponent) {
        ResponseEntity<MyNewComponent> result = this.restTemplate.exchange(anotherUri ,HttpMethod.POST, new HttpEntity<>(newComponent), MyNewComponent.class);
    //...
    }
}

我没有明确设置标头,因为有很多 POST 请求,而且我不想全部更改。有没有办法设置default Content到 JSON?

到目前为止我尝试过

  1. 添加拦截器。但有时我需要 XML。
  2. 覆盖内容协商
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }
  1. setting
restTemplate.setMessageConverters(Collections.singletonList(new MappingJackson2HttpMessageConverter()));

并使用new RestTemplate()在我想要 XML 的服务中。

==> 第三个确实有效,但感觉有点不对。

我本来希望设置默认值Content在某处键入,以便在未设置任何内容的正常情况下使用 JSON,在我显式设置的情况下使用 XMLContent to XML.

谢谢你的帮助。


我们最终发现,消息转换器的顺序非常重要。 Jackson 似乎将 XML 消息转换器放在 JSON 消息转换器之前。因此,我们将 XML 消息转换移至最后,并且它起作用了。

    @Bean
    RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    // move XML converter to the end of list
    List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
    for (int i = 0; i < messageConverters.size() -1 ; i++) {
        if (messageConverters.get(i) instanceof MappingJackson2XmlHttpMessageConverter) {
            Collections.swap(messageConverters, i,messageConverters.size() - 1);
        }
    }

    restTemplate.setMessageConverters(messageConverters);

    // add interceptors if necessary
    restTemplate.setInterceptors(Collections.singletonList(catalogInterceptior()));
    return restTemplate;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml? 的相关文章

  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • 无法在 Intellij 中运行主类[重复]

    这个问题在这里已经有答案了 我有以下项目结构 ProjectRoot src Main examples libs My src文件夹被标记为sources在 Intellij 中 现在 当我想运行 Main 类时 出现以下错误 Excep
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 当前平台不支持桌面 API

    我遇到过这个错误 java lang UnsupportedOperationException 当前平台不支持桌面 API 我将从我的 java 应用程序中打开一个文件 我用这个方法 Desktop getDesktop open new
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • Spring SpEL - 用于创建字符串和自定义对象映射的表达式语言

    我在用着春季启动从属性文件中读取以下内容的示例 sub region data AF subRegionCd 34 subRegionName Southern Asia subRegionDesc status A 我在下面使用过 但不起
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • javadoc 子集/java 库组织

    我自己从来没有运行过javadoc 无论是在命令行还是ant 的 javadoc 任务 http ant apache org manual Tasks javadoc html 我将使用 ant 我需要为我编写的库生成 javadoc 问
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • Spring 如何在运行时获取有关“强类型集合”的泛型类型信息?

    我在 Spring 3 0 文档中阅读了以下内容 强类型集合 仅限 Java 5 在 Java 5 及更高版本中 您可以使用强类型集合 使用泛型类型 也就是说 可以声明一个 Collection 类型 使其只能包含 String 元素 例如
  • 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

    我想简化调用 Oracle 数据库的 Groovy 脚本的执行 如何将 ojdbc jar 添加到默认类路径以便我可以运行 groovy RunScript groovy 代替 groovy cp ojdbc5 jar RunScript
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe

随机推荐

  • e.srcElement 在 Firefox 中未定义?

    我正在开发一个网站 现在正在所有浏览器中进行测试 我目前正在 firefox 中进行测试 并且在使用 event sourceElement 时发现错误 我需要 e srcElement 做的是返回值 下面我展示了一个关于如何获取返回的值
  • 关于太多开放数字的警告

    在我创建许多人物的脚本中fix ax plt subplots 我收到警告运行时警告 已打开超过 20 个数字 通过 pyplot 接口创建的图形 matplotlib pyplot figure 会保留到显式关闭为止 并且可能会消耗太多内
  • 在 Web api 控制器中手动验证模型

    我有一个名为 用户 的类和一个属性 名称 public class User Required public string Name get set api控制器方法是 public IHttpActionResult PostUser U
  • @PathVariable 和 @ModelAttribute 的值重叠

    我有一个User存储在会话中的对象 SessionAttributes 以及一个直接的方法装饰 ModelAttribute以便在会话值为空时初始化它 用户类别 Entity Table name USER public class Use
  • 实现包含其他 Parcelable 的 Parcelable 时出现问题

    我正在实现 Parcelable 类 其中有另一个 Parcelable 在 OuterParcelable 类中 Override public void writeToParcel Parcel dest int flags Bundl
  • UnicodeDecodeError,utf-8 无效的连续字节

    我正在尝试使用该代码从日志文件中提取行 with open fichier 01 as f content f readlines print content 但它总是发出错误声明 Traceback most recent call la
  • Python 子进程 readlines() 挂起

    我尝试完成的任务是流式传输 ruby 文件并打印输出 NOTE 我不想一次打印出所有内容 main py from subprocess import Popen PIPE STDOUT import pty import os file
  • 在 WPF 中比较两个位图图像以检查它们是否不同的最快方法

    比较 2 个 BitmapImage 对象的最快方法是什么 一个位于 图像源 属性中 另一个是我在代码中创建的 我可以使用新的位图图像设置图像源 但它会导致闪烁 因为它会一遍又一遍地设置相同的图像 我只想在图像像素与 Image Sourc
  • ZEND,用数据渲染不同的视图

    我有一个问题 因为我想从不同的控制器渲染视图并传递数据 你知道该怎么做吗 我正在尝试 this gt renderScript index index phtml gt entries result 但我的如果 if count this
  • 当父元素为 display:none 时显示 HTML 子元素

    当父元素为 display none 时 是否有任何机制可以显示子元素 这种情况是隐藏选项卡上的验证错误 我想显示错误消息 即使该字段是隐藏的 这里是一个真正简化的 JSFiddle 情况http jsfiddle net vLYnk Ma
  • 如何在 SBT 中切换项目和库依赖关系?

    在 SBT 中声明托管库依赖关系很容易 例如 libraryDependencies Seq org specs2 specs2 1 12 2 test junit junit 4 7 test 虽然在 SBT 中声明项目依赖关系并不那么容
  • 在 iOS 上同时录制和播放(Phonegap 版本)

    我正在使用 Phonegap Build 版本 3 3 0 开发 iOS 和 Android 应用程序 应用程序的主要焦点是录音 并在后台播放另一个音频 音乐 对于这两种情况 我都使用phonegap媒体api和正确的音频文件进行录制 iO
  • concatMap f xs 和 concat $map f xs 之间的区别?

    想必他们做的是完全相同的事情concatMap f xs and concat map f xs 我为什么要选择其中之一而不是另一个 我想这可能是一种优化 如果是这样 GHC 7 8 仍然是这种情况吗 情况是这样的concatMap f x
  • Skype API 消息输出

    我如何从 Skype 接收消息并将其输出到我的应用程序 textbox1 Text 我在 skype4com 文档中寻找它 但没有找到任何内容 要监听聊天消息 您可以执行以下操作 First make a reference to skyp
  • JSON,替换引号和斜杠,但是用什么替换呢?

    我有一个忘恩负义的任务 就是在 Java 中手动构建 JSON 字符串 没有任何框架 只有一个 StringBuilder 我知道这很糟糕 但这只是原型的一部分 下次我会做得更好 我的问题 我怎样才能把字符串 gt Some text WI
  • 如何使用node-http-proxy进行HTTP到HTTPS的路由?

    这是我正在使用的模块版本 npm list g grep proxy email protected Web 服务调用我的机器 我的任务是根据请求正文的内容使用附加查询参数将请求代理到不同的 url 和主机 var http require
  • Python 3.5 UnicodeDecodeError 对于 utf-8 格式的文件(语言为“ang”,古英语)

    这是我第一次使用 StackOverflow 提问 但多年来你们集体保存了我的许多项目 让我感觉宾至如归 我正在使用 Python3 5 和 nltk 来解析完整的古英语语料库 该语料库以 77 个文本文件和一个 XML 文档的形式发布给我
  • 检查我的提交在 emacs/git 中是否有“import pdb”?

    我承诺import pdb pdb set trace 经常 有什么方便的方法可以阻止我这样做吗 我使用 emacs git magit 为了完整起见 以下是如何检查索引中版本的内容 构建尤金的回答并进行了一些更改 未作为完整的钩子进行测试
  • Razor 语法在编译前在视图中给出错误(无智能感知)

    我正在浏览 NuGet 包列表 并且正在更新 bootstrap jQuery 等所有内容 但是当我这样做时 我不假思索地更新了微软 欧文和另一个包 可能是 EF 或其他东西 它是一个主要版本更新 哎呀 我不得不通过删除我的项目 从源代码控
  • 如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml?

    我有一个工作的 Spring Boot 应用程序 它使用 JSON 作为交换数据格式 现在我必须添加一个仅以 xml 形式发送数据的服务 我添加了jackson dataformat xml到我的 pom 效果很好 Service publ