当前位置: 代码迷 >> J2EE >> JSON出错:can not access a member of class * with modifiers "public"
  详细解决方案

JSON出错:can not access a member of class * with modifiers "public"

热度:151   发布时间:2016-04-17 23:38:23.0
JSON报错:can not access a member of class * with modifiers "public"
本帖最后由 ChangXiZhou 于 2014-10-14 20:26:13 编辑
这个问题网上回答很多了,但是我的问题一直没有得到解决。

完整的异常信息:Class org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"。

Action代码:

public class QManageAction extends ActionSupport {
@Autowired
private QuestionnaireManageService questionnaireManageService;

private Map<String, Object> dataMap;

public QManageAction(){
dataMap = new HashMap<>();
}

public String displayAllQ() {
dataMap.clear();
Integer userId = 1;
Set<Questionnaire> questionnaires = questionnaireManageService.getQuestionnairesByUserId(userId);
dataMap.put("success", true);
dataMap.put("questionnaires", questionnaires);
return SUCCESS;
}

public String changeQStatus() {
dataMap.clear();
Integer questionnaireId = 1;
Integer changedStatus = 1;
Questionnaire changedStatusQ = questionnaireManageService.modifyQuestionnaireStatusById(questionnaireId, changedStatus);
dataMap.put("success", true);
dataMap.put("changedStatusQ", changedStatusQ);
return SUCCESS;
}

public Map<String, Object> getDataMap() {
return dataMap;
}
}


Service代码:

public class QuestionnaireManageService {
@Autowired
private UserBasicDAO userBasicDAO;
@Autowired
private QuestionnaireDAO questionnaireDAO; //两个DAO是Hibernate自动生成的。

public Set<Questionnaire> getQuestionnairesByUserId(Integer userId) {
Set<Questionnaire> resultQuestionnaires = new HashSet<>();

UserBasic userBasic = (UserBasic) userBasicDAO.findById(userId); 
Set<Survey> userSurveys = userBasic.getSurveies(); 
Iterator<Survey> surveysIterator = userSurveys.iterator();
while (surveysIterator.hasNext()) { 
Survey survey = (Survey) surveysIterator.next();
Questionnaire questionnaire = (new ArrayList<Questionnaire>(survey.getQuestionnaires())).get(0);
resultQuestionnaires.add(questionnaire);
}
return resultQuestionnaires;
}

public Questionnaire modifyQuestionnaireStatusById(Integer questionnaireId, Integer changedStatus) {
Questionnaire questionnaire = questionnaireDAO.findById(questionnaireId);
if (questionnaire.getQnaireStatus() != changedStatus) {
questionnaire.setQnaireStatus(changedStatus);
} else {

}
return questionnaire;
}
}


奇怪的是:我调用action里面的displayAllQ方法是成功的。而调用changeQStatus则是失败的,并报如上异常。

网上的解答方向是:action里面的接口没有实现序列化方法,要对其get方法进行处理。但是不符合我的情况。

是否可能是延时加载lazy=“false”的原因呢?
------解决思路----------------------
我来拿分哈!
  相关解决方案