XStream
Get Start
- http://x-stream.github.io/index.html
- processAnnotations(DataSource.class); 使用annotation
- autodetectAnnotations(true)
- 自动侦查注解将缓存所有类的类型. 所以性能会比较好
- 返序列化(XML -> JavaBean)无法使用
- 无论是否有Annonation,都可以转化
- 去除xml节点包名
Annonation
- @XStreamAlias : 用于自定义xml节点名字,默认等于属性名字,root节点默认等于类名
- @XStreamAsAttribute : xml节点属性,如果要修改属性名字,需要与@XStreamAlias 合用
- @XStreamOmitField : 忽略此属性
- @XStreamImplicit : 去除list的包装
- itemFieldName : list的节点的名字
- @XStreamConverter : 用自定义类型转换原对象里的类型
- @XStreamConverter(value=ToAttributedValueConverter.class, strings={"content"}) : 将content节点的包装去除,只留下内容
Jackson
XML 和 Java Bean的转换
- getting start
- 官网: https://www.baeldung.com/jackson
- com.fasterxml.jackson.dataformat:jackson-dataformat-xml
- @JacksonXmlRootElement : 跟节点
- localname : 指定节点名字
- namespace : xmlns
- @JacksonXmlProperty
- localname
- isAttribute = true : 是一个属性,而不是节点
- kotlin使用@get:JacksonXmlProperty
- @JacksonXmlElementWrapper : 使用集合类定义多个节点或者子节点
- localname : 定义父节点名字
- 可以使用@JacksonXmlProperty定义子节点名字
- useWrapping =false : 不使用子节点
- @JacksonXmlText
- 去除节点,只留下内容
- 用于创建有属性同时也有value的节点的value
- XmlMapper
- xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL) : 忽略空节点
- xmlMapper.configure( ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true ) : 添加头信息
- xmlMapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION) : 添加头信息
- xmlMapper.writeValueAsString(s)
JsonRpc
Getting Start
- Dependency
- implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml"
- implementation "com.fasterxml.jackson.module:jackson-module-kotlin"
- 提供接口
- interface 定义接口path: @JsonRpcService("/payment")
- impl 实现方法 : @AutoJsonRpcServiceImpl
- 调用接口
- val client = JsonRpcHttpClient(URL("http://localhost:8080/xxx"), emptyMap<String, String>())
- val clientProxy = ProxyUtil.createClientProxy(javaClass.classLoader, XXXInterface::class.java, client)
需要
@Bean fun autoJsonRpcServiceImplExporter() = AutoJsonRpcServiceImplExporter().apply { setObjectMapper(jacksonObjectMapper()) }
不支持通过范型传入返回值类型
Request 和 Response使用http
{
id: 1
method: crate
params: [param1,2,3...]
}
Velocity
Getting Start
- implementation "org.springframework.boot:spring-boot-starter-velocity:1.4.7.RELEASE"
使用
VelocityEngine
var velocityEngine = VelocityEngine() velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath") velocityEngine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader::class.java.name) velocityEngine.init()
Template
var template = velocityEngine.getTemplate("templates/${requestMethod}.vm") val context = VelocityContext() context.put("key", "value") val writer = StringWriter() template.merge(context, writer) writer.buffer.toString()