# XML处理器

后端返回数据有时候需要进一步处理,然后在输出,这个时候,就可以使用XML中handler属性来配置类方法。自定义方法类需要继承AbstractHubDataHandler (opens new window)抽象类。

public abstract class AbstractHubDataHandler implements IHubDataHandler{

    protected abstract void doHandle(HubXmlHandlerConfig dataConfig, Map<String, Object> dataMap);
    
    @PostConstruct
    public void init() {
        if (StringUtils.isNotBlank(getRegisterName())) {
            HubDataHandlerRegister.registerHandler(getRegisterName(), this);
        }
    }
    
    @Override
    public Object handle(HubXmlHandlerConfig dataConfig, Map<String, Object> dataMap) {
        doHandle(dataConfig, dataMap);
        return null;
    }
    
    //也可以在类中直接注册
    protected String getRegisterName() {
        return null;   
    }
}

说明

实现 doHandlegetRegisterName 两个方法,getRegisterName这个是方法名,直接在hangler中使用,doHandle表示具体实现。

# 举例说明

自定义一个日期格式化处理器

@Service
public class JsonFormatHubDataHandler extends AbstractHubDataHandler {
    public static final String REG_NAME = "jsonFormat";
    
    @Override
    protected void doHandle(HubXmlHandlerConfig dataConfig, Map<String, Object> dataMap) {
        List<Object> params = dataConfig.getParams();
        
        Date date = (Date) dataMap.get(dataConfig.getName());
        
        if (null != date) {
            String pattern = (String) params.get(0);
            dataMap.put(dataConfig.getName(), format(date, pattern));
        }
    }
    
    private String format(Date date, String pattern) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.format(date);
    }

    @Override
    protected String getRegisterName() {
        return REG_NAME;
    }
}

那么在XML中可以这样使用

<controller name="SysUserController">
    <grid name="TEST1">
        <col name="crtTm" mapper="sysUserVo.crt_tm" descr="创建时间" 
            handler="jsonFormat(yyyy-MM-dd)"/>
    </grid>
</controller>

也可以通过注解的方式配置

@Note(value = "创建时间", handler = "jsonFormat(yyyy-MM-dd)")
private Date crtTm;

说明

  • 格式化时间,只输出年月日。
  • 如果需要经过多个处理器处理,不同处理器之间用逗号","隔开即可。
赞助商