2.回顾传统注解SpringMVC搭建

296 阅读1分钟

image.png

回顾传统注解SpringMVC搭建

1.pom依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

2.在java目录下新建包以及AbstractAnnotationConfigDispatcherServletInitializer的实现类

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringMvcInit extends AbstractAnnotationConfigDispatcherServletInitializer{

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return null;
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return null;
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] {"/"};
	}

}

解释一下为什么用实现AbstractAnnotationConfigDispatcherServletInitializer来初始化DispatcherServlet

在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

3.新建RootConfig配置

import org.springframework.context.annotation.Configuration;

@Configuration
public class RootConfig {

}
@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class[] {RootConfig.class};
}

4.新建WebConfig配置

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc //启动springmvc 组件驱动<mvc:annotation-driven>
@ComponentScan("com.demo")
public class WebConfig implements WebMvcConfigurer {

}
@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class[] {WebConfig.class};
}

5.控制器

@RequestMapping("/hello")
@RestController
public class HelloController {

	@GetMapping
	public String hello() {
		
		return "hello";
	}
}

7.测试

image.png

8.返回对象

public class User {

	private int id;

	private String name;
	

	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

@RequestMapping("/hello")
@RestController
public class HelloController {

	@GetMapping
	public String hello() {
		
		return "hello";
	}
	
	@GetMapping("/user")
	public User getUser() {
		return new User(30,"luopeng");
	}
}

9.测试

image.png

10.解决

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.1</version>
</dependency>

11.测试

image.png