@RequestMapping(value = { ControllerUriConstant.add }, method = RequestMethod.POST)
@ActivityMapping(activity = ActivityEnum.ADD)
public String addActivities(@ModelAttribute("activityForm") ActivityForm activityForm, BindingResult bindingResult, Model model,
HttpServletRequest request) throws Exception {
new ActivityFormValidator().validate(activityForm, bindingResult, request.getLocale(), getMessageSource(), null, activityService);
if (bindingResult.hasErrors()) {
model.addAttribute(Constants.ACTIVITY_FORM,activityForm );
model.addAttribute(Constants.HAS_ERROR, Boolean.TRUE);
model.addAttribute("add", true);
model.addAttribute(Constants.ERROR_MESSAGE, getMessageSource().getMessage("ulearn.messages.add.failed", activityForm.getName()));
return "activityform";
} else {
model.addAttribute(Constants.SUCCESS_MESSAGE, getMessageSource().getMessage("ulearn.messages.add.success", activityForm.getName()));
JSONArray address =new JSONArray();
JSONObject jo = new JSONObject();
jo.put("id", "1");
jo.put("name","Test");
JSONObject jo1= new JSONObject();
jo1.put("id", "1");
jo1.put("name", "Test2");
JSONObject jo2= new JSONObject();
jo2.put("id", "1");
jo2.put("name", "Test3");
address.add(jo);
address.add(jo1);
address.add(jo2);
activityForm.setInsertJsonMysql(address);
activityService.add(activityForm);
}
return getActivities( model, request);
}
public void add(ActivityForm activityForm) throws TechnoShineException {
try {
Activity activity = new Activity();
activity.setName(activityForm.getName());
activity.setActive(activityForm.getActive());
activity.setInsertJsonMysql(activityForm.getInsertJsonMysql());
activityDAO.getMapper().insert(activity);
logAudit(getAuditableList(activity, null), getMessageSource().getMessage("ulearn.messages.add.success", activity.getName()), 0, ActivityEnum.ADD);
} catch (Exception e) {
throw new TechnoShineException(e, ActivityService.class);
}
}
<insert id="insert" parameterType="com.technoshinelabs.ulearn.persistance.bean.controlpanel.Activity">
INSERT INTO activity (activity_name,is_active,json_array)
VALUES (#{name},#{active},#{insertJsonMysql})
</insert>
//最后得到此错误错误由以下引起:java.lang.IllegalStateException:类型handler对于属性&quot; insertJsonMysql&#39;的参数映射为null。未指定和/或找不到指定的javaType / jdbcType组合。
答案 0 :(得分:0)
我想你要存储的是实际的JSON,MySQL表列 json_array 的类型是 VARCHAR 或 TEXT 。
JSONArray实际上只是一个用于构建JSON的实用程序类。
然后,您应将类 Activity 的属性 insertJsonMysql 的类型更改为 String ,并将其设置为的String表示形式JSONArray
activity.setInsertJsonMysql(activityForm.getInsertJsonMysql().toString());
编辑:关于插入枚举列。
根据MySQL 5.7 Reference Manual,我会说你插入enum类型列的方式与插入任何String的方式相同,DB将根据 CREATE TABLE 中声明的值列表检查提供的值。
但根据您提供的代码示例, insertJsonMysql 的值将为:
[{"id":"1","name":"Test1"},{"id":"1","name":"Test2"},{"id":"1","name":"Test3"}]
这意味着其中一个枚举值必须是这个确切的字符串。
然而,我觉得这不是你所期望的。也许使用SET类型的列是一个更接近的答案。