@RequestBody 接收动态参数

方案:

  1. 使用map 来接收不确定的参数信息,然后转换到bean上,不会因为参数为null导致解析失败异常!
/**
     * 转换map 到bean
     * @param map
     * @param obj
     */
    public static void transMap2Bean(Map map, Object obj) {

        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();

                if (map.containsKey(key)) {
                    Object value = map.get(key);
                    // 得到property对应的setter方法
                    Method setter = property.getWriteMethod();
                    setter.invoke(obj, value);
                }
            }
        } catch (Exception e) {
            log.error("transfer error!");
        }
    }

实现自己的HandlerMethodArgumentResolver,参考
https://sdqali.in/blog/2016/01/29/using-custom-arguments-in-spring-mvc-controllers/

如果参数确定固定为两套或三套方案,可以使用多加一个entity来接收,待测试;

你可能感兴趣的:(@RequestBody 接收动态参数)