广安做网站,问题反馈的网站怎么做,网站开发四点注意事项,西安市住宅和城乡建设局网站在我们开发过程中#xff0c;我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理#xff0c;但是我们在实际开发过程中#xff0c;我们可能经历一些#xff0c;比如对于XML格式的请求#xff0c;我们在后端应该如何接收#xff0c;并且如何将XML格式的参数变成…在我们开发过程中我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理但是我们在实际开发过程中我们可能经历一些比如对于XML格式的请求我们在后端应该如何接收并且如何将XML格式的参数变成对象然后返回一个XML对象呢
实现原理
我们在处理XML格式的数据的时候需要知道我们最初学习Spring系列中的Spring MVC。因为在Spring MVC中我们有一个消息转换器的概念其主要负责处理不同格式的请求数据进行处理然后将这个数据包装成为对象以便提供更加友好的变成体验。
我们研究Spring MVC的源码可以得到在Spring MVC中定义了一个HttpMessageCoverter接口抽象了消息转换器对类型的判断对读写的判断与操作具体如下
public interface HttpMessageConverterT {boolean canRead(Class? clazz, Nullable MediaType mediaType);boolean canWrite(Class? clazz, Nullable MediaType mediaType);ListMediaType getSupportedMediaTypes();T read(Class? extends T clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;void write(T t, Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;}boolean canRead(Class? clazz, Nullable MediaType mediaType)判断给定的类和媒体类型是否可以被读取。在处理请求时用于判断是否可以将请求的消息体转换为指定的类对象。boolean canWrite(Class? clazz, Nullable MediaType mediaType)判断给定的类和媒体类型是否可以被写入。在处理响应时用于判断是否可以将指定的类对象转换为响应的消息体。ListMediaType getSupportedMediaTypes()获取该消息转换器支持的媒体类型列表。这些媒体类型表示该转换器可以读取或写入的数据格式。 - Tread(Class? extends T clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException将请求的消息体转换为指定的类对象。该方法从 HttpInputMessage 中读取请求的数据并将其转换为指定的类对象。void write(T t, Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException将指定的类对象转换为响应的消息体。该方法将指定的类对象转换为字节流并写入到 HttpOutputMessage 中作为响应的数据。
我们知道在HTTP中Content-Type中有各种不同的格式定义如果需要支持XML格式的消息转换那就的使用对应的转换器并且我们知道在Spring MVC中默认已经有一套采用Jackson实现的转换器MappingJackson2XmlHttpMessageConverter。
拓展实现
1. 引入XML消息转换器
如果你是Spring 用户并非Spring Boot用户那么我们可以引入XML消息转换器。
Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {Overridepublic void configureMessageConverters(ListHttpMessageConverter? converters) {Jackson2ObjectMapperBuilder builder Jackson2ObjectMapperBuilder.xml();builder.indentOutput(true);converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));}
}如果你是Spring Boot用户那么就直接加入相关依赖就行了那么相关依赖就交于Spring Boot自动实现了
dependencygroupIdcom.fasterxml.jackson.dataformat/groupIdartifactIdjackson-dataformat-xml/artifactId
/dependency2. 定义对象与XML的关系
做好了基础配置后就可以定义XML内容对应的Java对象了
Data
NoArgsConstructor
AllArgsConstructor
JacksonXmlRootElement(localName User)
public class User {JacksonXmlProperty(localName name)private String name;JacksonXmlProperty(localName age)private Integer age;}其中Data、NoArgsConstructor、AllArgsConstructor是lombok简化代码的注解主要用于生成get、set以及构造函数。JacksonXmlRootElement、JacksonXmlProperty注解是用来维护对象属性在xml中的对应关系。
上述配置的User对象其可以映射的Xml样例如下后续可以使用上述xml来请求接口
Usernamemiaow/nameage4/age
/User3.创建一个接收xml请求的接口
完成了需要转换的对象之后我们可以编写一个相关接口来接受XML并返回xml。
Controller
public class UserController {PostMapping(value /user,consumes MediaType.APPLICATION_XML_VALUE,produces MediaType.APPLICATION_XML_VALUE)ResponseBodypublic User create(RequestBody User user) {user.setName(姓名 : user.getName());user.setAge(user.getAge() 20);return user;}
}启动项目之后我们可以通过相关接口工具进行请求发送例如 我采用的事ApiFox这个软件如果你有更好的软件可以选择您自己的软件