spring boot前后端传参的实现

获取传参

@PathVariable注解主要用来获取URL参数。即这种风格的 URL:http://localhost:8080/user/{id}

@GetMapping("/user/{id}")
public String testPathVariable(@PathVariable Integer id) {  System.out.println("获取到的id为:" + id);
return "success"; }

对于多个参数的获取

@GetMapping("/user/{idd}/{name}")
public String testPathVariable(@PathVariable(value = "idd") Integer id, @PathVariable String name) {  System.out.println("获取到的id为:" + id); System.out.println("获取到的name为:" + name); return "success"; }

@RequestParam:是从 Request 里获取参数值,即这种风格的 URL:http://localhost:8080/user?id=1。除此之外,该注解还可以用于 POST 请求,接收前端表单提交的参数

@RequestMapping("/user")
public String testRequestParam(@RequestParam(value = "idd", required = false) Integer id) {
System.out.println("获取到的id为:" + id);
return "success"; }

当参数较多时,可以不用@RequestParam。而是通过封装实体类来接收参数。

public class User {
private String username;
private String password;
//添加setter和getter }

使用实体接收的话,我们不必在前面加 @RequestParam 注解,直接使用即可。

@PostMapping("/form2")
public String testForm(User user) {
System.out.println("获取到的username为:" + user.getUsername());
System.out.println("获取到的password为:" + user.getPassword());
return "success";
}

上面的是表单实体提交。当JSON格式提交时,需要用@RequestBody。
@RequestBody 注解用于接收前端传来的实体。接收参数为JSON格式的传递。

public class User {
private String username;
private String password;
// set get } 

@PostMapping("/user")
public String testRequestBody(@RequestBody User user) { System.out.println("获取到的username为:" + user.getUsername());
System.out.println("获取到的password为:" + user.getPassword());
return "success"; }

传输时需要传JSON格式的参数。

Restful格式

前后端传参一般使用Restful规范

RESTful 架构一个核心概念是“资源”(Resource)。从 RESTful 的角度看,网络里的任何东西都是资源,可以是一段文本、一张图片、一首歌曲、一种服务等,每个资源都对应一个特定的 URI(统一资源定位符),并用它进行标示,访问这个 URI 就可以获得这个资源。

spring boot的注解很好的支持了restful格式

  • @GetMapping,处理 Get 请求
  • @PostMapping,处理 Post 请求
  • @PutMapping,用于更新资源
  • @DeleteMapping,处理删除请求
  • @PatchMapping,用于更新部分资源

@RestController注解可将返回的数据结果转换成json格式,在sprinboot中默认使用的JSON解析技术框架是Jackson。
基本示例

@RestController
@RequestMapping("/")
public class Hello {
  @GetMapping(value = "hello")
  public String hello(){
    return "hello world";
  }
}

对null的处理

在项目中,遇到null值时,希望把null都转成""。需要设置一个配置

@Configuration
public class Jackson {
  @Bean
 @Primary @ConditionalOnMissingBean(ObjectMapper.class)
  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();
    objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
      @Override
 public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString("");
      }
    });
    return objectMapper;
  }
}

就会自动把null值转换为空值""

包装统一的JSON返回结构

在后台返回的接口数据中,一般要求结构是统一的,包括有状态码、返回信息。所以可以用泛型封装一个统一的JSON返回结构

public class JsonResult<T> { 

  private T data;
  private String code;
  private String msg; 

  /**
 * 若没有数据返回,默认状态码为0
 */ public JsonResult(T data){
    this.data = data;
    this.code = "10200";
    this.msg = "操作成功";
  }

  //省略getter和setter

修改controller中的代码

@RequestMapping("/list")
public JsonResult<List> getStudentList(){
  List<Student> list = new ArrayList<>();
  Student stu1 = new Student(2,"22",null);
  Student stu2 = new Student(3,"33",null);
  list.add(stu1);
  list.add(stu2);
  return new JsonResult<>(list);
}

访问url,返回的格式将是:

{"data":
  [{"id":2,"username":"22","password":""},     {"id":3,"username":"33","password":""}],
"code":"10200",
"msg":"操作成功"}

取配置文件中的值

1、取配置文件中的配置

author.name=zhangsan

可以使用@Value注解即可获取配置文件中的配置信息

@Value("${author.name}")
private String userName;

2、设置配置类来保存配置

配置信息如下:

url.orderUrl=http://localhost:8002
url.userUrl=http://localhost:8003
url.shoppingUrl=http://localhost:8004

新建一个配置类,来保存配置

@Component
@ConfigurationProperties(prefix = "url")
public class MicroServiceUrl {
  private String orderUrl;
  private String userUrl;
  private String shoppingUrl;
  // 省去 get 和 set 方法
}

@Component 注解是把该类作为组件放在spring容器中,使用时直接注入即可。
@ConfigurationProperties注解就是指明该类中的属性名就是配置中去掉前缀后的名字

使用ConfigurationProperties需要加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

使用Resource注解就可以将添加配置类MicroServiceUrl引入到controller中使用了

@Resource
private MicroServiceUrl microServiceUrl; 

@GetMapping(value = "getResource")
public String getR(){
  return microServiceUrl.getUserUrl();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解SpringMVC重定向传参数的实现

    在spring的一个controller中要把参数传到页面,只要配置视图解析器,把参数添加到Model中,在页面用el表达式就可以取到.但是,这样使用的是forward方式,浏览器的地址栏是不变的,如果这时候浏览器F5刷新,就会造成表单重复提交的情况.所以,我们可以使用重定向的方式,改变浏览器的地址栏,防止表单因为刷新重复提交. jsp文件: <%@ page language="java" contentType="text/html; charset=UTF-8&q

  • 详解SpringMVC——接收请求参数和页面传参

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter("name") String pass = request.getParameter("pass") } 2,Spring会自动将表单参数注入到方

  • spring boot前后端传参的实现

    获取传参 @PathVariable注解主要用来获取URL参数.即这种风格的 URL:http://localhost:8080/user/{id} @GetMapping("/user/{id}") public String testPathVariable(@PathVariable Integer id) { System.out.println("获取到的id为:" + id); return "success"; } 对于多个参数的获

  • 使用Spring boot + jQuery上传文件(kotlin)功能实例详解

    文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍. 前端部分 前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对,formdata这种方式发送表单数据更为灵活.你可以使用它来组织任意的内容,比如使用 formData.append("test1","hello world"); 在kotlin后端就可以使用@RequestParam("test1") greet

  • 基于Spring Security前后端分离的权限控制系统问题

    目录 1. 引入maven依赖 2. 建表并生成相应的实体类 3. 自定义UserDetails 4. 自定义各种Handler 5. Token处理 6. 访问控制 7. 配置WebSecurity 8. 看效果 9. 补充:手机号+短信验证码登录 前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于Spring Security前后端分离的权限控制系统问题. 话不多说,入正题.一个简单的权限控制系统需要

  • Spring boot实现上传文件到本地服务器

    本文实例为大家分享了Spring boot实现上传文件到本地服务器的具体代码,供大家参考,具体内容如下 引入配置 UploadFileConfig类 @Configuration public class UploadFileConfig {        @Value("${file.uploadFolder}")         private String uploadFolder;           @Bean         MultipartConfigElement m

  • Spring boot + thymeleaf 后端直接给onclick函数赋值的实现代码

    这里是控制器里返回的 /** * @param pageUtil 分页工具类 * @param cliCorpQuery 查询类 * @param model model * @return String */ @RequestMapping(value = {"/list"}, method = RequestMethod.GET) public String list(PageUtil<CliCorp> pageUtil, CliCorpQuery cliCorpQue

  • spring boot 图片上传与显示功能实例详解

    首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到classpath的目录下的,所以上传的文件不知相对于应用目录在哪,也不知怎么写访问路径合适,对于新手的自己真的一头雾水. 后面想起了官方的例子,没想到一开始被自己找到的官方例子,后面太依赖百度谷歌了,结果发现只有官方的例子能帮上忙,而且帮上大忙,直接上密码的代码 package hello; import static org

  • Spring Boot 文件上传原理解析

    首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关心配置可以快速启动开发,有兴趣可以了解下自动化配置实现原理,本质上是 spring 4.0的条件化配置实现,深抛下注解,就会看到了. 说Spring Boot 文件上传原理 其实就是Spring MVC,因为这部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么

  • Spring Boot应用上传文件时报错的原因及解决方案

    问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location is not valid". 原因追踪 这个问题的根本原因是Tomcat的文件上传机制引起的! Tomcat在处理文件上传时,会将客户端上传的文件写入临时目录,这个临时目录默认在/tmp路径下,如:"/tmp/tomcat.6574404581312272268.18333/work/T

  • Spring Boot 打包上传Docker 仓库的详细步骤

    重要提示:学习本文之前需要提前了解docker容器相关的知识,了解和熟练运用常用的docker操作命令,如果已经了解了docker容器相关的知识那我们就开搞吧! 以下是完成标题所述功能的大致步骤: 搭建docker镜像仓库 修改Spring Boot 配置文件添加docker仓库配置,打包,上传至docker 镜像仓库 从自己搭的docker镜像仓库拉取上传的镜像文件并运行 Step1 搭建docker镜像私有仓库 搭建docker镜像仓库我们需要依赖docker-registry工具 ,doc

  • Spring Boot文件上传最新解决方案

    一.创建一个简单的包含WEB依赖的SpringBoot项目 pom.xml内容: <!-- Spring Boot web启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jsp --> <d

随机推荐