form表单提交,后台实体类接收转义问题

本文探讨了在使用Ajax提交表单时,实体类接收参数出现&符号转义的问题。提供了两种解决方案:一是尝试使用@RequestBody注解;二是利用StringEscapeUtils.unescapeHtml4()方法进行反转义,确保数据正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:前台表单用ajax提交,data为validateForm.serializeArray(),后台用实体类接收参数,&符号被转义为&但是从request中直接取值是没问题的,请问如何解决实体类接收到的参数的转义问题。

代码如下:

前台代码:

var formData = validateForm.serializeArray();

$.ajax({
    type: 'POST',
    cache: false,
    url: basepath + "/newProjectAdjustment/saveProjectAdjustmentInfo.do",
    data: formData,
    dataType: "json",
    async:false,
    success: function (result) {
        if (result.success) {
            saveFlag = true;
        } else {
            parent.$.messager.alert("提示", result.msg != "操作成功" ? result.msg : projMessage.get("C008"), "info");
        }
    },
    error: function (result) {
        parent.$.messager.alert("提示", projMessage.get("C008"), "info");
    }
});
return saveFlag;
后端代码:
@RequestMapping(value = "saveProjectAdjustmentInfo.do", method = RequestMethod.POST)
@ResponseBody
public AjaxJson saveProjectAdjustmentInfo(HttpServletRequest request, ProjectAdjustmentDTO projectAdjustmentInfo) throws InvocationTargetException, IllegalAccessException {
    Map params = FormFormatterUtil.formatFrom2Map(request);
 
    AjaxJson result = new AjaxJson();
   
    return result;
}

Debug:
这是实体类中接收的参数:

在这里插入图片描述
这是request种接收的参数:
在这里插入图片描述

建议1:
在实体参数前面加@RequestBody试试
建议2:
在实体类的set方法中使用StringEscapeUtils.unescapeHtml4()就能反转义

<think>我们正在处理一个关于MCMS系统的技术问题:实现后台栏目自定义外链接的功能。根据用户提供的引用内容,我们了解到MCMS是一个基于Java的网站管理系统,使用Maven管理依赖,数据库为MySQL,后端框架未明确说明(但根据常见的JavaWeb项目,可能是SpringBoot)。用户需求:在后台栏目管理中增加自定义外链的功能。这意味着在添加或编辑栏目时,除了常规的栏目名称、类型等,还需要一个字段用于输入外部链接地址,并且当栏目被点击时,会跳转到该外部链接。实现思路:1.数据库层面:在栏目表(可能是mcms_category)中增加一个字段,用于存储外部链接地址(例如:`external_link`VARCHAR(255))。2.后端层面:-修改栏目的实体类(Category),增加externalLink属性及其getter/setter。-在栏目的DAO(或Mapper)和Service层中,确保该字段被正确处理(增删改查)。-在栏目添加和修改的表单处理中,接收并保存外部链接字段。-在栏目控制器(Controller)中,可能需要调整栏目的添加、修改和显示逻辑。3.前端层面:-在栏目管理页面(添加/编辑栏目)的表单中,增加一个输入框用于填写外部链接。-在栏目列表页面,可能需要显示该字段(或者仅在编辑时显示)。4.栏目跳转逻辑:-在生成栏目链接时,如果该栏目设置了外部链接,则使用该外部链接;否则,使用系统内部生成的栏目链接(如栏目列表页)。具体步骤(以常见的SpringBoot+MyBatisPlus+Thymeleaf为例):步骤1:数据库变更执行SQL语句,在栏目表中添加字段:```sqlALTERTABLEmcms_categoryADDCOLUMNexternal_linkVARCHAR(255)DEFAULTNULLCOMMENT'栏目自定义外链';```步骤2:修改实体类在Category.java中增加属性:```javaprivateStringexternalLink;//外部链接//getterandsetterpublicStringgetExternalLink(){returnexternalLink;}publicvoidsetExternalLink(StringexternalLink){this.externalLink=externalLink;}```步骤3:修改DAO和Service由于使用MyBatisPlus,通常不需要修改MapperXML,但需要确保在BaseMapper的方法中能够自动映射该字段(因为MyBatisPlus默认支持驼峰转下划线,字段名为external_link,所以实体类属性为externalLink即可)。步骤4:修改Controller在栏目添加和修改的方法中,接收并保存externalLink参数。步骤5:修改前端页面在栏目添加/编辑的表单中(可能是category_form.html)增加一个输入框:```html<divclass="form-group"><label>自定义外链:</label><inputtype="text"class="form-control"name="externalLink"th:value="${category.externalLink}"><smallclass="form-texttext-muted">如果填写了外链,点击该栏目将直接跳转到外链地址</small></div>```步骤6:修改栏目链接生成逻辑在栏目展示的地方(如前端模板),原本生成栏目链接可能是:```html<ath:href="@{/list/{id}(id=${category.id})}"th:text="${category.name}"></a>```现在需要判断是否有外部链接,如果有则使用外部链接:```html<ath:if="${category.externalLink!=nullandcategory.externalLink!=''}"th:href="${category.externalLink}"th:text="${category.name}"target="_blank"></a><ath:unless="${category.externalLink!=nullandcategory.externalLink!=''}"th:href="@{/list/{id}(id=${category.id})}"th:text="${category.name}"></a>```或者更简洁的写法:```html<ath:href="${category.externalLink!=nullandcategory.externalLink!=''}?${category.externalLink}:@{/list/{id}(id=${category.id})}"th:text="${category.name}"th:target="${category.externalLink!=nullandcategory.externalLink!=''}?'_blank':''"></a>```注意事项:-如果栏目类型原本就有区分(比如:内部栏目,外部链接栏目),可能需要同时调整栏目类型的选择逻辑,在类型为外部链接时才显示该输入框,并且保存时进行验证。-安全考虑:外部链接需要防止XSS攻击,可以对输入进行过滤,或者在前端输出时进行转义(但注意链接地址不能转义,需要确保链接是合法的,可以使用白名单协议如http,https)。由于MCMS系统可能有自己的特定实现,以上步骤是通用思路。具体实现时,需要参考MCMS的现有代码结构。另外,根据引用内容中的步骤7和8,我们启动项目后需要重新生成静态化页面(如果栏目信息被静态化的话),所以修改后需要在后台重新生成栏目和文章。如果用户需要更具体的帮助,可以提供相关代码文件(如栏目的实体类、控制器、表单页面等)以便进一步分析。相关问题:1.如何在MCMS中增加数据库字段?2.如何修改MCMS的栏目实体类和控制器?3.MCMS中如何防止XSS攻击?4.修改MCMS后为什么需要重新静态化?</think>### MCMS系统后台栏目自定义外链实现方法 在MCMS系统中实现后台栏目自定义外链功能,需通过以下步骤完成: #### 1. **数据库修改** 在栏目表(通常为`mcms_category`)中添加外链字段: ```sql ALTER TABLE mcms_category ADD COLUMN external_link VARCHAR(255) COMMENT '栏目外链地址'; ``` > 需执行SQL升级补丁(如`mcms-up-5.3.0.sql`)[^1] #### 2. **后端实现** ##### (a) 实体类修改 在`Category.java`中增加字段: ```java @Column(name = "external_link") private String externalLink; // 外链地址 ``` ##### (b) 栏目服务层 在`CategoryService.java`中处理外链逻辑: ```java public String getCategoryUrl(Category category) { if (StringUtils.isNotBlank(category.getExternalLink())) { return category.getExternalLink(); // 优先返回外链 } return "/list/" + category.getId(); // 默认栏目链接 } ``` ##### (c) 控制器修改 在栏目管理控制器`CategoryAdminController.java`中: ```java @RequestMapping("/save") public String save(@Valid Category category) { // 接收外链参数 categoryService.saveOrUpdate(category); return "redirect:/admin/category/list"; } ``` #### 3. **前端实现** ##### (a) 栏目表单页 在`category_form.html`中添加外链输入框: ```html <div class="form-group"> <label>栏目外链</label> <input type="text" class="form-control" name="externalLink" th:value="${category.externalLink}" placeholder="http://"> </div> ``` ##### (b) 栏目展示页 在`category_list.html`中修改链接生成: ```html <a th:href="${category.externalLink ?: '/list/' + category.id}"> <th:block th:text="${category.name}"></th:block> </a> ``` #### 4. **静态化处理** 修改静态化逻辑(`StaticPageGenerator.java`): ```java public void generateCategory(Category category) { if (StringUtils.isBlank(category.getExternalLink())) { // 原静态化逻辑 } else { // 外链栏目跳过静态化 } } ``` #### 5. **配置验证** 1. 修改`application-dev.yml`确保字段映射正确 2. 重启应用后访问后台: ``` http://localhost:8080/ms/login.do ``` 3. 管理员账号:`msopen`/`msopen` 4. 在栏目管理中添加外链字段 > **注意事项**: > 1. 外链栏目建议禁用静态化生成 > 2. 前端需添加链接安全性校验(如协议白名单) > 3. 升级后需重新生成栏目缓存[^1] --- ### 相关问题 1. 如何在MCMS中扩展数据库字段而不影响现有数据? 2. MCMS栏目管理的前端模板文件通常位于哪个目录? 3. 如何为MCMS添加自定义字段的验证规则? 4. 实现外链功能后如何保持SEO优化效果?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值