SpringMVC接收复杂参数的处理方法

柔情痞子 提交于 2020-01-29 04:23:04

情景描述

页面上有两个列表,列表中的每条数据都需要评审通过还是不通过,我需要在前台页面点击提交的时候把两个列表中的所有数据以及几个独立的参数传递到后台.

一个一个零散的传递肯定是行不通的,所以直接才有了这篇文章.

解决方法

1. 先把接收参数封装成一个dto实体类.

dto是入参实体类的后缀,vo是出参实体类的后缀.

dto实体类文件如下:

@Data
public class ReviewDto {

    /**
     * 报名id
     */
    private String enterId;

    /**
     * 专家id
     */
    private String expertId;

    /**
     * 询价目录评审结果
     */
    private Integer inquiryResult;

    /**
     * 资格证明文件评审结果
     */
    private List<QualificationDto> qualificationDtoList;

    /**
     * 响应条件评审结果
     */
    private List<RespondDto> respondDtoList;

    /**
     * 备注及附件评审结果
     */
    private Integer remarkResult;

}

2. js页面方法

 var param = [];
    var reviewDto = {
        enterId:$("#enterId").val(),
        inquiryResult:'1',  //询价目录评审结果
        qualificationDtoList:param,  //资格证明文件评审结果
        respondDtoList:param, //响应条件评审结果
        remarkResult:$("input[name=remarkResult]:checked").val() //备注及附件评审结果
    };
    $.ajax({
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType : "json",
        async:false,
        url: "expert/submit",//请求的action路径页面
        data: JSON.stringify(reviewDto),
        error: function () {//请求失败处理函数
            alert("提交失败");
        },
        success:function(data){
            debugger//请求成功后处理函数。
            alert(data.msg);
            $("#submit").hide();
        }
    });

在这里可以看到我没有直接把零散的参数全放在data中,而是在ajax外面定义了一个对象reviewDto,然后把后台需要接收的参数都放在了这里面.

注意:

contenType属性要用application/json;charset=utf-8

3. 后台controller中的方法

/**
     * 提交
     * @param request
     * @param reviewDto
     * @return
     */
    @RequestMapping(value = "submit",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<String> submit(HttpServletRequest request , @RequestBody ReviewDto reviewDto){
        AccountVo accountInfo = (AccountVo)request.getSession().getAttribute("accountVo");
        Expert expert = expertServiceApi.selectExpertByUserId(accountInfo.getAccountId());
        reviewDto.setExpertId(expert.getId().toString());
        return expertServiceApi.insertSubmit(reviewDto);
    }
  1. 在ReviewDto参数前面添加@RequestBody,接收复杂参数,完成请求报文到对象的转换.

  2. 在方法上面添加@ResponseBody注解,返回json类型的数据,完成对象到响应报文的转换.

总结

数据交互出现问题的时候不要慌,按照下面的步骤来.

  1. 看看ajax中的contentType属性是啥,把几种常见的类型挨个一遍.
  2. 看看ajax中data的参数有没有必要封装成一个对象
  3. 看看controller中的@RequestBody,@ResponseBody,@RequestParam注解有没有用对.
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!