在 JaxB 编组期间将字符串截断到最大限制

Posted

技术标签:

【中文标题】在 JaxB 编组期间将字符串截断到最大限制【英文标题】:Truncate string to max limit during JaxB marshalling 【发布时间】:2021-10-23 12:48:40 【问题描述】:

如果字符串大小超过 XSD 中定义的最大大小,我需要截断 XML 中字符串的大小。在 JAXB 中有没有一种方法可以直接截断编组时的字符串,而不是手动验证对象中的每个属性并截断数据。

【问题讨论】:

【参考方案1】:

你可以使用@XmlJavaTypeAdapter

https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html

类似这样的:

public class TruncatorAdapter extends XmlAdapter<String, String> 
    Integer maxLen=...;
    /*Java => XML*/
    public String marshal(String val) throws Exception 
        return val.substring(0,maxLen);
    
    /*XML => Java*/
    public String unmarshal(String val) throws Exception 
        return val;
    

【讨论】:

谢谢。但在这种情况下,最大长度是固定的,不是动态的吗?我不能在具有不同最大长度值的多个字符串中使用它? 一个简单的解决方案是实现不同长度的不同类。公共类 TruncatorAdapter10 扩展 TruncatorAdapter public TruncatorAdapter10 () super(10); 抄送...

以上是关于在 JaxB 编组期间将字符串截断到最大限制的主要内容,如果未能解决你的问题,请参考以下文章