Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在未知XML标记上失败?_Java_Xml_Spring_Spring Boot_Jackson - Fatal编程技术网

Java 如何在未知XML标记上失败?

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 {

在我的SpringBoot2.1应用程序中,我想提供一个XML-HTTP-API

在现有XSD模式的基础上,我生成了java类(使用jaxb)。生成的代码大致如下所示:

@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);
    }
}