SpringBoot--通过JSON传递请求参数--方法/实例

news2024/11/20 20:31:38

原文网址:SpringBoot--通过JSON传递请求参数--方法/实例_IT利刃出鞘的博客-CSDN博客

简介

        本文用示例介绍SpringMVC如何通过JSON格式传递入参。

        JSON格式使用post方式来请求,即:对应的注解为:@PostMapping。

        @PostMapping注解的方法可以接收1个@RequestBody标记的参数和多个没有@RequestBody标记的参数

代码

Entity

User.java

package com.example.demo.entity;

import lombok.Data;
import java.util.List;

@Data
public class User {
    private String name;
    private Integer age;
    private String[] password;
    private List<Integer> scoreArray;
}

Account.java

package com.example.demo.entity;

import lombok.Data;
import java.io.Serializable;

@Data
public class Account implements Serializable {
    private String phoneNum;
    private String[] emails;
}

Controller

package com.example.demo.controller;

import com.example.demo.entity.User;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;
import java.util.List;

@RequestMapping("/json")
@RestController
public class JsonController {
    @PostMapping("/1")
    public User setUserNoAnnotation(User user, List<String> password, Integer[] scoreArray) {
        printUser(user);
        return user;
    }

    @RequestMapping("/2")
    public User setUserAnnotation(@RequestBody User user) {
        printUser(user);
        return user;
    }

    @RequestMapping("/3")
    public User setUserAnnotation1(@RequestBody User user, @RequestParam List<String> password, Integer[] scoreArray) {
        System.out.println(password);
        if (scoreArray != null) {
            System.out.println(Arrays.asList(scoreArray));
        } else {
            System.out.println("scoreArray = null");
        }
        System.out.println();
        printUser(user);

        return user;
    }

    @RequestMapping("/4")
    public User setUserAnnotation2(@RequestBody User user, @RequestBody List<String> password, @RequestBody Integer[] scoreArray) {
        if (password != null) {
            System.out.println(password);
        } else {
            System.out.println("password = null");
        }

        if (scoreArray != null) {
            System.out.println(Arrays.asList(scoreArray));
        } else {
            System.out.println("scoreArray = null");
        }
        System.out.println();
        printUser(user);
        return user;
    }

    private void printUser(User user){
        System.out.println("name            : " + user.getName());
        System.out.println("password        : " + Arrays.asList(user.getPassword()));
        System.out.println("scoreArray      : " + user.getScoreArray());
        System.out.println("acount.phoneNum : " + user.getAccount().getPhoneNum());
        System.out.println("account.emails  : " + Arrays.asList(user.getAccount().getEmails()));
    }
}

测试

为方便测试,我用了knife4j。

测试前提

json的body

{
    "name": "Jarvis",
    "password": [
        "ab",
        "cd"
    ],
    "scoreArray": [
        99,
        98
    ],
    "account": {
        "phoneNum": "123",
        "emails": [
            "123@qq.com",
            "456@163.com"
        ]
    }
}

正确的用法

1个RequestBody

0个@RequestBody,多个无@RequestBody

1个@RequestBody,多个无@RequestBody

错误的用法(会报错)

多个@RequestBody

后端报错信息

2022-09-20 22:04:45.857  WARN 3340 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is java.io.IOException: Stream closed]

错误原因

        每个方法只能有一个@RequestBody。使用@RequestBody把请求转化为特定的Object(在最后会关闭相应的流),所以在同一个方法中第二次使用@RequestBody是没用的,因为流已经关闭。

        You cannot use it this way as only one @RequestBody per method is allowed. Using @RequestBody Spring converts incoming request body into the specified object (what closes the stream representing body at the end) so attempting to use @RequestBody second time in the same method makes no sense as stream has been already closed.

不带@RequestBody参数类型是List

后端错误信息

2022-09-20 23:19:11.044 ERROR 3340 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for interface java.util.List] with root cause

java.lang.NoSuchMethodException: java.util.List.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_201]
	at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_201]
	...(其他信息)

错误原因

不支持非@RequstBody的参数是List类型。(数组类型可以)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue学习笔记

课程来源&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH?p4&vd_source6f37192b213c98639a87ec77b26d105d 学习计划&#xff1a;一天学10节&#xff0c;从第四节开始做笔记&#xff0c;预计16天完成&#xff08;完成日期2022年12月7日&#xff09; 目录&#…

【1】Anaconda基本命令以及相关工具:jupyter、numpy、Matplotilb

目录 一、Anaconda ◼ anaconda命令行操作 二、jupyter notebook 1 jupyter的基础使用 ◼ jupyter的启动 ◼ ipynb文件的新建、重命名、删除 ◼ 菜单说明 ◼ 运行cell单元块 ◼ 编写文档笔记 2 jupyter的高级使用&#xff1a;常用魔法命令 ◼ writefile pycat run …

【Golang】来用GoLand开发第一个Go程序

​ &#x1f4d3;推荐网站(不断完善中)&#xff1a;个人博客 ​ &#x1f4cc;个人主页&#xff1a;个人主页 ​ &#x1f449;相关专栏&#xff1a;CSDN专栏、个人专栏 ​ &#x1f3dd;立志赚钱&#xff0c;干活想躺&#xff0c;瞎分享的摸鱼工程师一枚 文章目录&#x1f34a…

【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

基于JAVA的坦克大战小游戏--入门级小游戏零、项目获取一、项目简介二、开发环境三、游戏玩法四、运行截图零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一、项目简介 本项目是基于…

基于Java+Spring+Strusts2+Hibernate 社区智慧养老服务平台 系统设计与实现

一.项目介绍 本系统分为前端 和 后端 两块&#xff0c; 前端包括&#xff1a;首页、健康新闻、疾病预防、养生之道、动态通知、登录和注册 各模块的文章点击查看&#xff0c;支持评论以及回复功能&#xff0c; 登录成功之后点击欢迎您:后面的账号即可进入后台管理 后端包括&…

老杨说运维 | 非常重要,事关转型

《荀子》有云&#xff1a;“水能载舟&#xff0c;亦能覆舟。”在公司日常运营过程中&#xff0c;数据指标就像是水&#xff0c;孕育着生命&#xff0c;承载着万物。科学的数据指标能指引公司在正确的道路上不断前进&#xff0c;使平淡无常的业务焕发新生&#xff0c;而不合理的…

Qt QUndoStack、QUndoCommand(实现撤回和回撤)

用到的类: 1 QUndoStack&#xff1a; 一个存放 QUndoCommand 命令的栈. 2 QUndoCommand&#xff1a;The QUndoCommand class is the base class of all commands stored on a QUndoStack. 3 QUndoView&#xff1a;The QUndoView class displays the contents of a QUndoStack.&…

C#上位机系列(3)—定时器和串口的介绍

本文是讲解C#.net平台的Winform框架下的第三个内容&#xff0c;手把手介绍上位机项目的创建方式以及一些写软件时常用的功能&#xff0c;讲解从零开始的每一个步骤。 本次介绍上位机中定时器的使用和串口的配置 定时器&#xff1a;每过一段设定好的时间进入执行函数&#xff…

SIMULIA现实仿真解决方案 SIMULIA仿真模拟应用程序

由 3DEXPERIENCE 平台提供技术支持&#xff0c;SIMULIA 可提供仿真模拟应用程序&#xff0c;这些应用程序使用户能够探究现实生活中产品、自然和生命的行为 SIMULIA 通过虚拟测试实现性能要求促进协作。其产品组合提供强大的工具&#xff0c;能够对采用V6设计的零件、组件和产…

敏捷开发失败的五个原因以及解决方案

作者&#xff1a;David Bevans , Mendix公司高级内容营销经理 敏捷开发是一个可以改变软件交付方式的框架且效果十分惊人&#xff0c;但鉴于需要反复不断规划、测试、集成以及其他进行中的开发方式&#xff0c;敏捷开发在某些情况下行不通。下文将对常见的敏捷开发失灵以及相应…

菁染料CY3/CY5/CY7标记链霉亲和素/胰岛素,CY3/CY5/CY7-Streptavidin/Insulin

产品名称&#xff1a;菁染料CY3/CY5/CY7标记链霉亲和素/胰岛素 英文名称&#xff1a;CY3/CY5/CY7-Streptavidin/Insulin 链霉亲和素(streptavidin下称SA)是与亲和素(avidin下称AV)有相似生物学特性的一种蛋白质&#xff0c;是streptomyces avidinii菌的分泌物&#xff0c;其分…

AotuDL中Linux环境下运行pix2pix-tensorflow的环境配置(tensorflow==1.8.0 python==3.6)

目录写在前面1. 租用实例时基础镜像的选择2. 配置环境3. 实验记录写在前面 &#x1f340;windows环境下运行&#xff1a;【用于图像修复、数据增强等】结合官方代码教程&#xff0c;在Windows 10下运行pix2pix-tensorflow&#xff08;tensorflow1.4.0 python3.6&#xff09; A…

【网站架构】服务器弹性伸缩不能全自动,实际如何追加服务器

大家好&#xff0c;欢迎来到停止重构的频道。 本期&#xff0c;我们讨论大型网站的伸缩性。 伸缩性指的是通过自动增减服务器数量以适应用户量或压力。 这些年&#xff0c;微服务、ServerLess、K8S等技术&#xff0c;都让人有一种服务器自动伸缩很容易实现的错觉。 其实&…

最短路径问题

目录 一、前言 二、算法讲解 1、Dijkstra--朴素算法&#xff1a;O(n * n) 2、Dijkstra--堆优化算法&#xff1a;O(mlogm) 3、Bellman_ford贝尔曼算法&#xff1a; O(n * m) 4、Spfa算法&#xff1a;O(n * m) 5、Spfa处理负环&#xff1a;O(n * m) 6、Floyd算法&#xf…

iOS 列表页面实时刷新解决方案

iOS 列表页面实时刷新解决方案 一、背景介绍 1.1 问题的出现 客户要求APP客户端每次切换Tab&#xff0c;都需要从服务器去获取最新的数据&#xff0c;所以每次切换Tab&#xff0c;客户端都会去主动刷新接口&#xff0c;以获取最新的数据。但是实际发现&#xff0c;每次切换T…

基于FPGA MIPS CPU设计学习(1)

关于什么是MIPS以及MIPS架构可参考文章: MIPS架构与指令简介 1 MIPS寄存器学习 MIPS寄存器详细解释如下: • 0 : 即 0: 即 0:

【Shell 脚本速成】04、Shell 脚本格式化输出与用户交互

目录 一、shell格式化输出 1、echo命令 案例演示&#xff1a; 2、输出颜色字体 3、综合案例 二、 用户交互 1、read命令 2、交互输入案例 计算机程序其实就是三步:输入、运算、输出&#xff0c;这个理论也适应于shell编程。 那么计算机是如何将信息按照比较舒服的格式输…

Unity - BRP管线关闭 - UpdateDepthTexture的绘制

最近一直忙着跟项目打杂。。。 比较少时间进修&#xff0c;充电。。。难受香菇 但是 unity 的踩坑经验倒是增加了不少&#xff08;还有很多坑的经验我都懒得写了&#xff0c;但是这些坑浪费查资料时间&#xff0c;还不如自己记下来&#xff0c;便于日后如果还有 BRP 项目的处理…

Neptune CHT-C助力零束打造智舱界王者

9月27日&#xff0c;上汽子品牌飞凡汽车的首款旗舰车型——飞凡R7刚一上市就牢牢吸引了众多视线&#xff0c;在了解了其配置后&#xff0c;用户纷纷称其为“智驾界卷王”。 飞凡R7搭载的RISING MAX 31巨幕&#xff0c;由中国品牌车型最大尺寸的43英寸宽幅真彩三联屏和全球首发量…

CSS的元素显示模式

元素显示模式是什么&#xff1f;&#xff1a; 由于网页中的标签非常多&#xff0c;在不同地方会用到不同类型的标签&#xff0c;了解他们的特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)以什么方式进行显示&#xff0c;比如<div>独占一行&#xff0c;比如…