我在方法参数中传递的请求参数得到org.springframework.beans.NotWritablePropertyException
。即使在此异常之后一切正常。这是在DynaTrace控制台上进行性能测试时捕获的。这是我的控制器方法: -
@RequestMapping(value = UrlConstants.ES_UPDATE_APPLICABLE_ITEM, method = RequestMethod.POST)
public void updateApplicableItem(@ModelAttribute("sessionDto") final SessionDTO sessionDto,
@RequestParam(value = GdrConstants.REWARD_ID) final Long rewardId,
@RequestParam(value = GdrConstants.APPL_ITEM_ID) final Long itemId,
@RequestParam(value = GdrConstants.COLUMN_NAME) final String columnName,
@RequestParam(value = GdrConstants.COLUMN_VALUE) final String columnValue,
final HttpServletRequest request, final HttpServletResponse response, final Model model) {
}
sessionDto是使用@ModelAttribute
与html表单绑定的Domain对象。在Dynatrace会话中,我可以看到以下异常: -
Invalid property 'itemId' of bean class [com.cisco.gdr.dto.SessionDTO]:
Bean property 'itemId' is not writable or has an invalid setter method. Does the
parameter type of the setter match the return type of the getter?
其他请求参数也抛出相同的异常,即rewardId,ItemId,coulnName和columnValue。
如果是,那么我们如何防止这种情况以及其他更好的方法。我不希望在初始化中使用这些参数。
请注意,UI仍然正常加载,仅在Dynatrace工具中捕获并且需要修复。
* *添加SessionDTO *
// @Component(value =" sessionDto") // @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS,value = WebApplicationContext.SCOPE_SESSION) 公共课SessionDTO {
private final Map<String, Object> attributes = new HashMap<String, Object>();
/**
* Adds the given attribute key and value to the session DTO. If the given attribute key already exists, it will be
* overridden with the new value.
*
* @param key
* @param value
*/
public void addAttribute(final String key, final Object value) {
this.attributes.put(key, value);
}
/**
* Removes the given attribute key and its value from the session DTO.
*
* @param key
*/
public void removeAttribute(final String key) {
this.attributes.remove(key);
}
/**
* Returns the attribute for the given key.
*
* @param key
* @return
*/
public Object getAttribute(final String key) {
return this.attributes.get(key);
}
/**
* Returns all the attributes added in the session DTO.
*
* @return
*/
public Map<String, Object> getAttributes() {
return this.attributes;
}
}
@DirkLachowski, 嗨Dirk,我已经编辑了post在其中添加sessionDTO。我没有在这里使用表单发布。我正在对这个控制器方法进行ajax调用.SeesionDto不是表单对象,它的@ modelSessionAttribute.I我只是从这里提取一些信息这在业务逻辑中是必需的。我怀疑使用@ModelAttribute作为请求参数而没有表单绑定会产生问题。 谢谢你-Junaid