zoukankan      html  css  js  c++  java
  • springMvc中自定义bean转换接收前台传的参数

    转载:https://blog.csdn.net/u013476435/article/details/81538099

    因前端整体传参时,参数名都不是驼峰写法,类似 music_name,music_type,

    因此在后台需要加上@RequestParam("music_name")String musicName  来接收,

    但是后台中是用bean来接收的

    @RequestMapping(value = "/test",method = {RequestMethod.POST})
    @ResponseBody
    public void test( MusicInfo musicinfo) {
    System.out.println("进来了" + musicinfo.getMusicName());
    }
     因此需要自定义去将参数转换成可以识别的 如果前端传music_name,

    我们处理成musicName并添加到MusicInfo实体中,完成参数的解析.

    自定义参数转换到实体bean并实现HandlerMethodArgumentResolver

    import org.springframework.beans.BeanUtils;
    import org.springframework.core.MethodParameter;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    import java.lang.reflect.Field;
    import java.util.Iterator;

    /**
    * @author qi.liu
    * @create 2018-08-09 下午 2:21
    * @desc 描述:
    **/
    public class TestDiyRequestParamResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
    return parameter.hasParameterAnnotation(DiyRequestParam.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter,
    ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
    WebDataBinderFactory binderFactory) throws Exception {
    //生成结果的对象
    Object resultObject = BeanUtils.instantiate(parameter.getParameterType());
    //未经过处理的字段名 music_name
    String sourceTemp;
    //经过处理的字段名 musicName
    String executeTemp;
    //传参的值 例如 music_name=asdmsakdlasjd 的value
    String[] values;
    //得到bean中的方法
    Field[] frr = parameter.getParameterType().getDeclaredFields();
    for (Iterator<String> itr = webRequest.getParameterNames(); itr
    .hasNext(); ) {
    sourceTemp = itr.next();
    executeTemp = sourceTemp;
    // music_name -> musicName
    while (executeTemp.indexOf("_") > 0) {
    Integer indexOf = executeTemp.indexOf("_");
    executeTemp = executeTemp.replaceFirst("_", "");
    executeTemp = executeTemp.substring(0, indexOf) + executeTemp.substring(indexOf, indexOf + 1).toUpperCase() + executeTemp.substring(indexOf + 1, executeTemp.length());
    }
    //去赋值
    for (int i = 0; i < frr.length; i++) {
    frr[i].setAccessible(true);
    if (executeTemp.equals(frr[i].getName())) {
    values = webRequest.getParameterValues(sourceTemp);
    frr[i].set(resultObject, values[0]);
    }
    }
    }
    return resultObject;
    }
    }
    自定义注解 DiyRequestParam

    /**
    * @author qi.liu
    * @create 2018-08-09 下午 2:22
    * @desc 描述:
    **/
    @Target({ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface DiyRequestParam {
    String value() default "";

    boolean required() default true;

    String defaultValue() default " ue000ue001ue002 ";
    }
    在spring-mvc.xml中加入自定义的 TestDiyRequestParamResolver 

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="customArgumentResolvers">
    <list>
    <bean class="net.okdi.o2o.beautiful.controller.TestDiyRequestParamResolver">
    </bean>
    </list>
    </property>
    </bean>
    在参数前加上


    @RequestMapping(value = "/test",method = {RequestMethod.POST})
    @ResponseBody
    public void test(@DiyRequestParam MusicInfo musicinfo) {
    System.out.println("进来了" + musicinfo.getMusicName());
    }
     

    看下效果

    后台接收到


    ————————————————
    版权声明:本文为CSDN博主「变味的麦芽糖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u013476435/article/details/81538099

  • 相关阅读:
    技巧:在Silverlight中如何访问外部xap文件中UserControl
    Silverlight:代码隐藏和分部类
    silverlight 反射调用WebService
    [推荐]Silverlight 2 开发者海报
    轻松建立Silverlight开发环境
    windows 卸载IE8还原IE7的方法
    如何:访问双工服务
    技巧:在Silverlight 2应用程序中切换用户控件
    如何减少silverlight XAP包的尺寸
    Silverlight:应用程序和编程模型
  • 原文地址:https://www.cnblogs.com/ConfidentLiu/p/11791356.html
Copyright © 2011-2022 走看看