当我向REST发送XML有效负载时,控制器没有像预期的那样映射。我的实现是使用spring boot完成的。我已经使用JAXB基于XSD文件生成了POJO。只有当XML元素遵循POJO中遵循的相同命名约定时,才会映射它们。
<Declaration xmlns:p="My_Common_Types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MY_Schema.xsd">
<ID>ID</ID>
<Regime>REG</Regime>
</Declaration>
使用JAXB生成的代码如下所示,
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "id", "regime" }) @XmlRootElement(name = "Declaration") public class Declaration { @XmlElement(name = "ID") protected String id; @XmlElement(name = "Regime") protected String regime; public String getID() { return id; } public void setID(String value) { this.id = value; } public String getRegime() { return regime; } public void setRegime(String value) { this.regime = value; } }
Rest控制器如下所示,
@RestController public class XMLConsumerController { @PostMapping("/xmlPayload") public void decodeXML(@RequestBody Declaration xmlPayLoad) { } }
pom.xml依赖关系如下所示,
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
真的很感谢有人能帮我解决这个问题。
移除jackson-DataFormat-XML依赖项将会起作用。
更新:
通过邮递员使用粘贴的xml。正文以text/xml形式发送。我的依赖关系如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
而且效果很好
更新2:
从错误响应中的消息来看,它似乎需要声明的名称空间,即使我在您发布的类中没有看到它。可能在package-info.java中指定了一个名称空间。
Ok尝试使用该请求得主体:
<p:Declaration xmlns:p="My_Common_Types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MY_Schema.xsd">
<ID>ID</ID>
<Regime>REG</Regime>
</p:Declaration>
它仍然可能失败,但肯定不会抱怨申报。如果它是关于ID或体制的,那么在有效负载中添加'p'前缀并重复。
我希望将XML反序列化为Java Pojo,但我不需要所有元素,并且我希望避免创建样板包装类来获取一些子元素 例如-->现在不起作用
本文向大家介绍wpf 绑定到另一个命名元素的属性,包括了wpf 绑定到另一个命名元素的属性的使用技巧和注意事项,需要的朋友参考一下 示例 您可以绑定到命名元素上的属性,但是命名元素必须在范围内。
本文向大家介绍aurelia 基于命名约定创建自定义元素,包括了aurelia 基于命名约定创建自定义元素的使用技巧和注意事项,需要的朋友参考一下 示例 通过CustomElement在类名中简单地添加后缀,即可基于命名约定在Aurelia中创建一个基本的自定义元素。此后缀将由Aurelia自动删除。类名称的其余部分将被小写并使用连字符分隔,然后可用作元素名称。 示例: my-element.js
为了在跨API开发中向开发者提供一致的开发体验,所有的命名应该保证: 简单 直观 一致 这适用于接口、资源、集合、方法以及消息的命名。 因为很多开发者并非以英语作为母语,所以命名约定的目标之一是确保大多数开发者可以更容易理解 API。对于方法和资源,我们鼓励使用简单、直观和一致的单词来命名。 API 中的命名应该使用正确的美式英语。例如,使用美式英语的 license 而非英式英语的 licenc
在本节,我们不会讨论适用于大规模和可维护的最佳 CSS 命名方案,因为这不仅仅超过了个人的能力范围,也不是一个Sass样式指南可以解决的问题。我个人推荐遵从 CSS Guidelines 的建议。 良好的命名对保持整体代码的一致性和可读性非常重要,在 Sass 中可以命名的地方如下: 变量; 函数; 混合宏。 由于 Sass 占位符遵循和类名相同的命名模式,因此被视为常规的 CSS 选择器,也就在
函数名 小技巧 使用小写字母,并用下划线分隔单词。使用双冒号 :: 分隔库。函数名之后必须有圆括号。关键词 function 是可选的,但必须在一个项目中保持一致。 如果你正在写单个函数,请用小写字母来命名,并用下划线分隔单词。如果你正在写一个包,使用双冒号 :: 来分隔包名。大括号必须和函数名位于同一行(就像在Google的其他语言一样),并且函数名和圆括号之间没有空格。 # Single fu