文章目录
- 前言
- 前期准备
- @ResponseBody 返回JSON
- @RequestMapping 映射控制器
- @GetMapping、@PostMapping
 
前言
提示:这里可以添加本文要记录的大概内容:
SpringMVC框架只需要少量的配置即可快速实现Web应用程序开发,不需要大量的XML配置文件。
不必再写转型,统一JSON格式(前后端分离项目)
前期准备
第一步:新建项目Maven项目
 
 在下一步中勾选第一个选项,创建一个简单的项目,最后填写相关信息后完成
 
 项目创建完后后有个报错,缺个配置文件
增加一个插件即可
第二步:完善 pom.xml 文件
项目建成后在 pom.xml 文件中导入相关代码,比如:
缺什么加什么
<dependencies>
    <!-- 此依赖会关联引用Spring中的所有基础jar包 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.8.RELEASE</version>
    </dependency>
    <!-- spring-webmvc会依赖spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
   <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
   </dependency>
  <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
  </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- 单元测试Junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
等插件下载完后如果项目还有错,那是因为项目和插件之间不是实时更新,接下来选择强制更新一下
 
 第三步:config 配置
在src/main/java 文件夹下新建包 com.springmvc,然后再新建 config 包
在 config 包下新建两个类:
MvcConfig.java
package com.springmvc.config;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.*;
import com.springmvc.interceptor.MyInterceptor;
@Configuration
// 当包名被改变时,这里也需要被改变
@ComponentScan("com.springmvc")
@EnableWebMvc //使用EnableWebMvc开启springmvc注解方式配置
public class MvcConfig implements WebMvcConfigurer {
 
	 /**
     * 跨域设置
     */
    public void addCorsMappings(CorsRegistry registry) {
       registry.addMapping("/**")
            .allowedHeaders("*")
            .allowedOrigins("*")
            .allowCredentials(true);
    }
 
    /**
     * 添加拦截器(可以添加多个)
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
    /**
     * 配置文件上传解析器
     */
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
        // 设置上传单个文件的大小限制,单位:字节     倒序:KB*MB*10,这里是10MB
        commonsMultipartResolver.setMaxUploadSizePerFile(10 * 1024 * 1024);
        // 设置上传文件的总大小,单位:字节    这里是100MB
        commonsMultipartResolver.setMaxUploadSize(100 * 1024 * 1024);
        return commonsMultipartResolver;
    }
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    	StringHttpMessageConverter converter = new StringHttpMessageConverter();
    	converter.setDefaultCharset(Charset.forName("UTF-8"));
    	List<MediaType> list = new ArrayList<MediaType>();
    	list.add( MediaType.APPLICATION_JSON);
    	converter.setSupportedMediaTypes(list);
    	converters.add(converter);
    	// JSON转换器
    	converters.add(new MappingJackson2HttpMessageConverter()); 
    }
}
MvcInit.java
package com.springmvc.config;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
import javax.servlet.Filter;
 
/**
 * ①:1、创建Mvc初始化类,需要继承AbstractAnnotationConfigDispatcherServletInitializer类
 */
public class MvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * springmvc容器的父容器spring配置类
     * 实际工作中我们的项目比较复杂,可以将controller层放在springmvc容器中
     * 其他层,如service层、dao层放在父容器了,bean管理起来更清晰一些
     * 也可以没有父容器,将所有bean都放在springmvc容器中
     *
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }
 
    /**
     * ②:2、设置springmvc容器的spring配置类
     *
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{MvcConfig.class};
    }
 
    /**
     * ③:3、配置DispatcherServlet的url-pattern
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
 
    /**
     * ④:4、注册拦截器
     *
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        //添加拦截器,解决乱码问题
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceRequestEncoding(true);
        characterEncodingFilter.setForceResponseEncoding(true);
        return new Filter[]{characterEncodingFilter};
    }
}
提示:以下是本篇文章正文内容,下面案例可供参考
@ResponseBody 返回JSON
在src/main/java 文件夹下新建 controller包,在controller包下新建一个类
@Controller
public class HelloController {
	// URL请求地址
	@RequestMapping("/hello") 
	//转JSON格式
	@ResponseBody 
	public String hi() {
		System.out.println("请求已到达");
		return "还好吧";
	}
}
Tomcat启动,有这条信息代表启动成功(初始化 dispatcher )
 
 运行结果:
 
原来在写controller包时,只能指定一个路径,现在可以指定多个
再写一个方法:
	@RequestMapping("/test") 
	@ResponseBody
	public String test() {
		System.out.println("test请求已到达");
		return "abcdefg";
	}

@RequestMapping 映射控制器
@RequestMapping注解在处理器类上可以设置请求URL的父路径,而在处理器类的某个方法上使用@RequestMapping注解则可以设置请求URL的第二级访问目录,这样可以实现更细粒度的控制。这样做可以实现URL的模块化管理,提高代码的可维护性和可扩展性。
先写 po 包:
public class Food {
	private Integer foodId;
	private String foodName;
	private Double foodPrice;
	// 自动生成 Getter、Setter、toString()、有参无参方法
}
再写 controller 包:
@Controller
@RequestMapping("/food")
public class MapperController {
}
增加食品请求:
	@RequestMapping("/add")
	@ResponseBody
	public String add() {
		System.out.println("处理增加食品请求");
		return "增加成功";
	}
测试:
 
删除食品请求:
	@RequestMapping("/remove")
	@ResponseBody
	public String remov() {
		System.out.println("处理删除食品请求");
		return "删除成功";
	}
测试:

修改食品请求:
	@RequestMapping("/update")
	@ResponseBody
	public String update() {
		System.out.println("处理修改食品请求");
		return "修改成功";
	}
测试:
 
查询食品请求:
	@RequestMapping("/query")
	@ResponseBody
	public List<Food> query(){
		System.out.println("处理查询食品请求");
		List<Food> list = new ArrayList<Food>();
		list.add(new Food(1, "羊肉锅", 49.9));
		list.add(new Food(2, "小龙虾", 46.8));
		list.add(new Food(3, "肚包肉", 39.8));
		return list;
	}

@GetMapping、@PostMapping
@GetMapping:只处理 get 请求
 @PostMapping:只处理 post 请求
比如把上面的增加删除方法改一下,把@RequestMapping分别改成@GetMapping 或 @PostMapping
	@PostMapping("/add")
	@ResponseBody
	public String add() {
		System.out.println("处理增加食品请求");
		return "增加成功";
	}
添加测试:这样添加方法就只能选择POST了
 
如果还是 get 请求会引起 405 报错(方法用错了)
 












![[虚幻引擎] UE DTBase64 插件说明 使用蓝图对字符串或文件进行Base64加密解密](https://csdnimg.cn/release/blog_editor_html/release2.3.5/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N6B9)






