springmvc踩坑-service文件没有标注且返回值null

在我们自动新建一个服务类时,因为方便,有时会忘记给类添加 @Service注解

甚至忘记 将返回值 添加好。

package com.ssm.crud.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ssm.crud.bean.Employee;
import com.ssm.crud.mapper.EmployeeMapper;

@Service
public class employeeService {

	@Autowired
	EmployeeMapper employeeMapper;
	
	public  List<Employee> getAll() {
        employeeMapper.selectByExampleWithDept(null);
		return null;
	}//上面这个地方 的返回值 默认是null  而我们需要的操作是 return  employeeMapper.selectByExampleWithDept(null);


}

 

springmvc踩坑-jackson与spring的版本兼容问题

一开始 springmvc  4.3.9版本中,用控制器 handler 返回 json 时,用了 2.1.5 的jackson包,发现还是报错 找不到 类方法。

Jul 15, 2018 1:31:48 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter HttpPutFormContentFilter
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/DefaultIndenter
	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.init(AbstractJackson2HttpMessageConverter.java:97)
	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.<init>(AbstractJackson2HttpMessageConverter.java:90)
	at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.<init>(MappingJackson2HttpMessageConverter.java:66)
	at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.<init>(MappingJackson2HttpMessageConverter.java:57)
	at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:61)
	at org.springframework.web.filter.HttpPutFormContentFilter.<init>(HttpPutFormContentFilter.java:63)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4689)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5329)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.util.DefaultIndenter
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
	... 23 more

于是改用 jackson 2.9.6的包时,发现成功了,不再报错。

原因是Spring 3.x 和4.X处理JSON的一个类不一样

spring3.x是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

spring4.x是org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

springmvc踩坑-控制器中的根目录与路径映射

在springmvc中,@RequestMapping的值可以/xxx,也可以是xxx,效果一样

@RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)

特别注意一下,在rest风格中 请求页面如果是 “emp/${emp.id} ,那么处理器的RequestMapping值也要是 /emp/{id} 不用写错成 /emp 导致无法访问

另一方面:控制器的返回值 return “redirect:/emps”; 指明重定向和转发的都要用用绝对路径,否则路径解析就出错了。

springmvc踩坑-配置视图解析前后缀内容重复

配置文件里面的 配置内容重复了。

当时在springmvc中,配置转发器时,发现视图解析器 居然有两个。一个添加了前缀和后缀,一个没有添加。

然后我在handler【也叫controller】中,    —》{这个是非注解配置的handler}

@Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{ 
    
    //新建ModelAndView
    ModelAndView modelAndView =  new ModelAndView();
    //相当 于request的setAttribut,在jsp页面中通过itemsList取数据
    modelAndView.addObject("itemsList", ""); 
   
 
    //指定视图 (本来这里就是 最终返回地址了,但是视图解析器有前缀和后缀 干扰了;正确做是删除视图解析器的前缀和后缀)
    modelAndView.setViewName("/WEB-INF/views/success.jsp");
    
    //或者 正确的做法 这里返回success;在视图解析器添加 前缀和后缀
    //modelAndView.setViewName("success");

    return modelAndView;

}

发现,返回的路径一直是:/WEB-INF/views/WEB-INF/views/success.jsp.jsp
所以一直报错了。。。