发表于: 2018-01-23 23:04:15

2 795


今天完成的事情:

1. 完成2个接口

添加步骤,查看步骤接口


明天计划的事情

1. 修改和删除步骤接口

2. 教材上下架接口


遇到的问题:

spring 3的坑:
@RequestMapping(value = "/a/u/admin/book/task/", method = RequestMethod.PUT)
public String updateTaskJson(HttpServletRequest request,
                      HttpServletResponse response, ModelMap model,@RequestBody Task task) throws Exception {
}

spring 3版本controller接收一个List<Model> 的类型的时候会出现
报错:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.ptteng.playlearn.ojbk.course.model.Step
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)


原因为:spring 3的版本不能很好的映射 List<model> 只能处理为linkedHashMap 如下图: 

解决方法:
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.8</version>
</dependency>
stepList = JsonUtil.parseJsonList(JsonUtil.toJsonStr(stepList),Step.class) ;
*/
public class JsonUtil {
    private static ObjectMapper INSTANCE = new ObjectMapper();
    private JsonUtil() {}
    /**
     * @param obj 准备转换对象
     * @description 对象转换成json字符串
     * @author paul
     */
    public static String toJsonStr(Object obj) {
        try {
            return INSTANCE.writeValueAsString(obj);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * @param json 准备转换json
     * @param type 转换类型
     * @throws Exception 转换异常
     * @description json字符串转换成对象
     * @author paul
     */
    @SuppressWarnings("unchecked")
    public static <T> T parseJson(String json, String type) {
        try {
            return (T) parseJson(json, Class.forName(type));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * @param json 准备转换json
     * @param clazz 转换类型
     * @description json字符串转换成对象
     * @author paul
     */
    public static <T> T parseJson(String json, Class<T> clazz) {
        try {
            return (T) INSTANCE.readValue(json, clazz);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * @param json 准备转换json
     * @param clazz 集合元素类型
     * @description json字符串转换成对象集合
     * @author paul
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> parseJsonList(String json, Class<T> clazz) {
        try {
            JavaType javaType = getCollectionType(ArrayList.class, clazz);
            return (List<T>) INSTANCE.readValue(json, javaType);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * @param collectionClass 集合类
     * @param elementClasses 集合元素类
     * @description 获取泛型的ColloectionType
     * @author paul
     */
    private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
        return INSTANCE.getTypeFactory().constructParametricType(collectionClass, elementClasses);
    }


收获:

1. 公司框架里的selectList 使用 UNION ALL这个SQL个关键词,当由Id查询多个model的时候,每一个查询都是一个select语句

然后用UNION ALL 链接起来,作用就是每一个语句都会生效执行,并且相同的查询结果不会只有一个,而是由链接顺序查询而出

例如:

SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2



步骤修改 ,删除  教材上下架接口

预计完成时间:1.24

DOME时间:2018-2-9



返回列表 返回列表
评论

    分享到