Java 如何在未知XML标记上失败?
在我的SpringBoot2.1应用程序中,我想提供一个XML-HTTP-API 在现有XSD模式的基础上,我生成了java类(使用jaxb)。生成的代码大致如下所示:Java 如何在未知XML标记上失败?,java,xml,spring,spring-boot,jackson,Java,Xml,Spring,Spring Boot,Jackson,在我的SpringBoot2.1应用程序中,我想提供一个XML-HTTP-API 在现有XSD模式的基础上,我生成了java类(使用jaxb)。生成的代码大致如下所示: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "CustomerRequestType", propOrder = { "firstName", "lastName" }) public class CustomerRequestType {
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CustomerRequestType", propOrder = {
"firstName",
"lastName"
})
public class CustomerRequestType {
@XmlElement(name = "firstName")
protected List<FirstNameType> firstName;
@XmlElement(name = "lastName")
protected List<LastNameType> lastName;
// ...getter methods...
}
@RestController
@RequestMapping("customer.xml")
public class CustomerController {
@PostMapping
public CustomerResponseType postCustomer(@RequestBody CustomerRequestType anfrage) {
// ...business code...
}
}
当反序列化带有未知标记或属性的请求时,我怎么能让带jackson的spring启动失败呢
<Customer>
<firstName>Bob</firstName>
<lastName>Schmitt</lastName>
<unknownTag unknownProperty="1234"/>
</Customer>
据我所知,Jackson主要用于JSON数据。它还支持XML和一些JAXB注释。但它不支持XML模式验证 看起来,您实际上是在寻找模式验证。然后您应该使用JAXB作为XML封送器 另见:
您需要检查
Spring Boot
使用哪个转换器来反序列化XML
负载。在您的例子中,它可能是Jaxb2RootElementHttpMessageConverter
。要使用Jackson
属性,您需要使用MappingJackson2XmlHttpMessageConverter
,它可以检查未知属性并引发unrecognedPropertyException
异常。要定制Jackson
的映射器配置,我们可以使用Jackson2ObjectMapperBuilderCustomizer
bean
请看下面的示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
@Configuration
public class JacksonMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired
private Jackson2ObjectMapperBuilderCustomizer customizer;
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter() {
Jackson2ObjectMapperBuilder xmlBuilder = Jackson2ObjectMapperBuilder.xml();
customizer.customize(xmlBuilder);
return new MappingJackson2XmlHttpMessageConverter(xmlBuilder.build());
}
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2XmlHttpMessageConverter());
super.configureMessageConverters(converters);
}
}
import org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.http.converter.HttpMessageConverter;
导入org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
导入org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
导入org.springframework.web.servlet.config.annotation.WebMVC配置支持;
导入java.util.List;
@配置
公共类JacksonMvcConfiguration扩展了WebMVCConfiguration支持{
@自动连线
私有Jackson2ObjectMapperBuilderCustomizer定制器;
公共映射Jackson2xmlhttpMessageConverter映射Jackson2xmlhttpMessageConverter(){
Jackson2ObjectMapperBuilder xmlBuilder=Jackson2ObjectMapperBuilder.xml();
customizer.customize(xmlBuilder);
返回新的MappingJackson2XmlHttpMessageConverter(xmlBuilder.build());
}
@凌驾
受保护的无效配置MessageConverters(列表
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
@Configuration
public class JacksonMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired
private Jackson2ObjectMapperBuilderCustomizer customizer;
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter() {
Jackson2ObjectMapperBuilder xmlBuilder = Jackson2ObjectMapperBuilder.xml();
customizer.customize(xmlBuilder);
return new MappingJackson2XmlHttpMessageConverter(xmlBuilder.build());
}
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2XmlHttpMessageConverter());
super.configureMessageConverters(converters);
}
}