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

J2EE 码拜 10年前 (2015-04-09) 2312次浏览 0个评论
 

这个问题网上回答很多了,但是我的问题一直没有得到解决。

完整的异常信息: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”的原因呢?

JSON报错:can not access a member of class * with modifiers "public"
依照:http://www.myexception.cn/javascript/639518.html
在struts.xml里面添加:
<result name=”returnValue” type=”json”>
        <param name=”excludeProperties”>.*hibernateLazyInitializer</param>
 </result>
解决了问题,但不知道为什么。

发现每次提问都是自问自答!快来个人让我把贴结了,把分给了

JSON报错:can not access a member of class * with modifiers "public"
25分
我来拿分哈!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JSON报错:can not access a member of class * with modifiers "public"
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!