diff --git a/CHANGELOG.md b/CHANGELOG.md index 4350c21c1..c0d1721b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ * 【poi 】 ExcelBase增加renameSheet、cloneSheet(issue#I466ZZ@Gitee) * 【core 】 ListUtil增加splitAvg方法(pr#397@Gitee) * 【poi 】 Excel07SaxReader支持数字类型sheet名称、支持sheetName:名称前缀(issue#I46OMA@Gitee) +* 【extra 】 Mail增加build方法(issue#I46LGE@Gitee) +* 【core 】 XmlUtil增加beanToXml重载,支持忽略null ### 🐞Bug修复 * 【core 】 修复MapUtil.sort比较器不一致返回原map的问题(issue#I46AQJ@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java index 45b59d769..292b89642 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java @@ -1270,10 +1270,25 @@ public class XmlUtil { * @since 5.2.4 */ public static Document beanToXml(Object bean, String namespace) { + return beanToXml(bean, namespace, false); + } + + /** + * 将Bean转换为XML + * + * @param bean Bean对象 + * @param namespace 命名空间,可以为null + * @param ignoreNull 时候忽略值为{@code null}的属性 + * @return XML + * @see JAXBUtil#beanToXml(Object) + * @since 5.7.10 + */ + public static Document beanToXml(Object bean, String namespace, boolean ignoreNull) { if (null == bean) { return null; } - return mapToXml(BeanUtil.beanToMap(bean), bean.getClass().getSimpleName(), namespace); + return mapToXml(BeanUtil.beanToMap(bean, false, ignoreNull), + bean.getClass().getSimpleName(), namespace); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java index eb90e3e21..c0609fcf6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/XmlUtilTest.java @@ -195,6 +195,33 @@ public class XmlUtilTest { Assert.assertEquals("2020/04/15 21:01:21", value); } + @Test + public void beanToXmlIgnoreNullTest() { + @Data + class TestBean { + private String ReqCode; + private String AccountName; + private String Operator; + private String ProjectCode; + private String BankCode; + } + + final TestBean testBean = new TestBean(); + testBean.setReqCode("1111"); + testBean.setAccountName("账户名称"); + testBean.setOperator("cz"); + testBean.setProjectCode(null); + testBean.setBankCode("00001"); + + // 不忽略空字段情况下保留自闭标签 + Document doc = XmlUtil.beanToXml(testBean, null, false); + Assert.assertNotNull(XmlUtil.getElement(doc.getDocumentElement(), "ProjectCode")); + + // 忽略空字段情况下无自闭标签 + doc = XmlUtil.beanToXml(testBean, null, true); + Assert.assertNull(XmlUtil.getElement(doc.getDocumentElement(), "ProjectCode")); + } + @Test public void xmlToBeanTest() { @Data diff --git a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java index bab301ba0..1f28d16a9 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java @@ -1,5 +1,6 @@ package cn.hutool.extra.mail; +import cn.hutool.core.builder.Builder; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; @@ -34,7 +35,7 @@ import java.util.Date; * @author looly * @since 3.2.0 */ -public class Mail { +public class Mail implements Builder { /** * 邮箱帐户信息以及一些客户端配置信息 @@ -364,6 +365,15 @@ public class Mail { } // --------------------------------------------------------------- Getters and Setters end + @Override + public MimeMessage build() { + try { + return buildMsg(); + } catch (MessagingException e) { + throw new MailException(e); + } + } + /** * 发送 * diff --git a/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java index a43d2c9fb..407959e13 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java @@ -345,7 +345,7 @@ public class MailUtil { * @since 4.6.3 */ public static String send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, Map imageMap, - boolean isHtml, File... files) { + boolean isHtml, File... files) { return send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files); } @@ -357,7 +357,7 @@ public class MailUtil { * @return {@link Session} * @since 5.5.7 */ - public static Session getSession(MailAccount mailAccount, boolean isSingleton){ + public static Session getSession(MailAccount mailAccount, boolean isSingleton) { Authenticator authenticator = null; if (mailAccount.isAuth()) { authenticator = new UserPassAuthenticator(mailAccount.getUser(), mailAccount.getPass()); @@ -386,7 +386,7 @@ public class MailUtil { * @since 4.6.3 */ private static String send(MailAccount mailAccount, boolean useGlobalSession, Collection tos, Collection ccs, Collection bccs, String subject, String content, - Map imageMap, boolean isHtml, File... files) { + Map imageMap, boolean isHtml, File... files) { final Mail mail = Mail.create(mailAccount).setUseGlobalSession(useGlobalSession); // 可选抄送人