getBean接受不到数据

image.png

前端传的数据是这样子的格式,但是getBean接受不到

评论区

zeroabc

2019-08-14 14:21

巧了。我最近也在遇到这种数据的场景。
前端提交的数据用这个处理
https://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery/8407771#8407771

后台用下面的方法获取到前端提交过来的json字符串
String rawData = getRawData();

然后
AdminJsonPropertyContract jsonObj = JSON.parseObject(rawData, AdminJsonPropertyContract.class);

zeroabc

2019-08-14 14:22

AdminJsonPropertyContract 我给一下我的给你代码你参考一下:



public class AdminJsonPropertyContract extends BaseVo {

private static final long serialVersionUID = -3852159614796521206L;

private PropertyContractObj propertycontract;

public class PropertyContractObj extends PropertyContract {

private List contractPositions = new ArrayList<>();

private List contractExtcosts = new ArrayList<>();

public List getContractPositions() {
return contractPositions;
}

public void setContractPositions(List contractPositions) {
this.contractPositions = contractPositions;
}

public List getContractExtcosts() {
return contractExtcosts;
}

public void setContractExtcosts(List contractExtcosts) {
this.contractExtcosts = contractExtcosts;
}

}

public PropertyContractObj getPropertycontract() {
return propertycontract;
}

public void setPropertycontract(PropertyContractObj propertycontract) {
this.propertycontract = propertycontract;
}

}

zeroabc

2019-08-14 14:27

PropertyContract 为一张合同的数据。尖括号发不出来,我下面用圆括号代替尖括号。
一张合同下有多个岗位,即有一个contractPositions 数组,数据类型是List(PositionModel)
一张合同下有多个自定义款项,即有一个contractExtcosts 数组,数据类型是List(ExtcostModel)

Willson_L

2019-08-14 14:40

@zeroabc 我现在也是这个干的,前端转成json字符串,然后后端在转回来。但是这么搞,总觉得怪怪的

zeroabc

2019-08-14 14:45

@Willson_L 不怪吧。完全可行,我们项目现在由前端到后端的流程都通了

JFinal

2019-08-14 15:01

@Willson_L getBean、getModel 目前不支持这种格式的数据接收,目前支持 modelName.attribute 这种格式的数据

你要的支持可以自己写一个 getBeanList(...) 方法来实现,大致如下:
1:通过控制台输出的 jfinal action report 中的 parameter 这一样的参数的 key 来用好 getBean、getModel 帮助实现

2:用一个 for 循环来分步骤获取,在获取的时候注意参数的生成:
List ret = new ArrayList();
for (int i=0; i < size; i++) {
Team t = getBean("team[" + i + "]", true);
ret.add(t);
}

注意几点:
1:如果你的 Team 生成了 setter 方法可以使用 getBean,否则要使用 getModel
2: getBean、getModel 的第一个参数是动态生成的,里头有中扩号的生成,以及下标值的生成
3: getBean、getModel 的第二个参数传递 true,可以跳过一些类型转换之类的异常
4:size 值通过别的方式获取一下