首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在控制器中传递非空值@RequestParameter?

如何在控制器中传递非空值@RequestParameter?
EN

Stack Overflow用户
提问于 2021-08-25 04:37:40
回答 3查看 52关注 0票数 1

我正在尝试通过在控制器方法中使用spring boot 2.5.3来更新实体。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:5000/api/v1/student/1

使用以下有效负载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name":"abc",
    "email":"abc@email.com",
    "dob":"2000-06-14"
}

这些值不会更新。当我使用调试器检查它们时,它们会得到空值。这是我的控制器方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PutMapping(path = "/{id}")
public ResponseEntity<?> updateStudent(@PathVariable("id") Long id, @RequestParam(required = false) String name, @RequestParam(required = false) String email) {
    Student savedStudent = studentService.updateStudent(id, name, email);
    return ResponseEntity.ok(savedStudent);
}

电子邮件和姓名是可选的。

调试器中:name:null,email:null。为什么它们会得到空值?从控制器传递值的正确方式是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Transactional
// We are not using any query from the repository because we have the service method with transactional annotation.
public Student updateStudent(Long studentId, String name, String email) {
    Student student = studentRepository.findById(studentId).orElseThrow(()->new EntityNotFoundException("Student with id " + studentId + " does not exists."));
    if (name!= null && name.length()>0 && !Objects.equals(name,student.getName())){
        student.setName(name);
    }
    
    if (email!= null && email.length()>0 && !Objects.equals(email,student.getEmail())){
        Optional<Student> optionalStudent = studentRepository.findStudentByEmail(email);
        if (optionalStudent.isPresent()){
            throw new IllegalStateException("Email is already taken");
        }
        student.setEmail(email);
    }
    System.out.println(student);
    Student savedStudent= studentRepository.save(student);
    return savedStudent;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-25 04:43:11

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name":"abc",
    "email":"abc@email.com",
    "dob":"2000-06-14"
}

这不是请求参数,而是请求正文。您需要创建一个类并使用@RequestBody注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
public class UpdateStudentRequest {
    private String id;
    private String name;
    private String email;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PutMapping(path = "/{id}")
public ResponseEntity<?> updateStudent(@PathVariable("id") Long id, @RequestBody UpdateStudentRequest request) {
    Student savedStudent = studentService.updateStudent(
            request.getId(), request.getName(), request.getEmail());
    return ResponseEntity.ok(savedStudent);
}

如果您想将请求参数发送为...URL参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:5000/api/v1/student/1?name=abc&email=abc@email.com
票数 1
EN

Stack Overflow用户

发布于 2021-08-25 04:43:54

您没有将其作为参数发送(在?之后)。http://localhost:5000/api/v1/student/1?name=John可以做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2021-08-25 04:51:27

由于您使用内容主体(在本例中为JSON )对HTTP请求进行POST,因此需要使用@RequestBody注释来映射主体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PutMapping(path = "/{id}")
public ResponseEntity<?> updateStudent(@PathVariable("id") Long id, @RequestBody StudentDTO student) {
    Student savedStudent = studentService.updateStudent(
            id, student.getName(), student.getEmail());
    return ResponseEntity.ok(savedStudent);
}

StudentDTO将是一个反映输入有效负载的轻量级类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StudentDTO {
    private String name;
    private String email;
    private String dob;
    // setters and getters
}

否则,为了保留您的RestController签名并使用@RequestParam规格化字段,您应该发送以下形式的请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:5000/api/v1/student/1?name=abc&email=abc@email.com&dob=2000-06-14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68923101

复制
相关文章
空与非空:浅谈非空约束的影响
黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 非空约束是字段的一个重要属性。但是,很多时候,数据库表的设计人员似乎并不十分在意这个属性。最常见的现象就是,除了主键字段外,所有字段都不指定该属性。而在Oracle中,默认是允许为空。 而实际上,优化器在选择执行计划时,非空约束是一个重要的影响因素。为了说明问题,我们建立以下测试表,然后分别说明非空约束在各种情况下对执行计划和性能的影响。 谓词评
数据和云
2018/03/06
3.2K0
空与非空:浅谈非空约束的影响
java中的参数传递-值传递、引用传递
参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。
chenchenchen
2022/11/29
4.7K0
java中的参数传递-值传递、引用传递
Java中的值传递与引用传递
在Java编程中,我们常常听到关于值传递和引用传递的讨论。这两个概念涉及到数据在方法之间如何传递的问题。理解这些概念对于正确编写Java程序至关重要。在本文中,我们将深入探讨什么是值传递和引用传递,以及为什么Java中只有值传递这一问题。
疯狂的KK
2023/09/07
3640
Java中的值传递与引用传递
Java 中是“值传递”还是“引用传递”?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
业余草
2019/10/25
7750
JAVA中的值传递和引用传递
先来看一个作为程序员都熟悉的值传递的例子: ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num = 5; System.out.println(num); changeValue(num); System.out.println(num); ... ... 答案显而易见,调用函数changeValue()前后num的值都没有改变。 由此做一个引子,我用图表描绘
小柒2012
2018/04/13
1.7K0
JAVA中的值传递和引用传递
Java中的值传递与引用传递详解
方法调用是编程语言中非常重要的一个特性,在方法调用时,通常需要传递一些参数来完成特定的功能。Java语言提供了两种参数传递的方式:值传递和引用传递。
良月柒
2019/03/20
2.1K0
Java中的值传递与引用传递详解
震惊 php empty 函数判断结果为空,但实际值却为非空
最近我在一个项目中使用 empty 时获取到了一些意料之外的结果。下面是我处理后的调试记录,在这里与你分享了。
柳公子
2018/09/17
3.3K0
Excel公式:提取行中的第一个非空值
有时候,工作表行中的数据可能并不在第1个单元格,而我们可能会要获得行中第一个非空单元格中的数据,如下图1所示。
fanjy
2022/11/16
4.7K0
Excel公式:提取行中的第一个非空值
hive补全连续或非连续空值数据sql
爬虫或业务场景运行中经常会出现丢数据的情况,可能随机丢一分钟,或者丢几十分钟,完全没有规律,如果想用上一个有效值来补全的话单纯用lag函数无法实现
chimchim
2023/10/17
5660
hive补全连续或非连续空值数据sql
java中按值传递和引用传递区别
一种是按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了,所以java在传递数据量很小的数据是值传递,比如java中的各种基本类型:int,float,double,boolean等类型的,具体可以自己测试。 代码:
用户7886150
2021/02/26
8950
Python中 传递值 与 传递引用 的区别
对于不可变类型传递值(不会影响原数据) 不可变类型 对于可变类型传递引用(会影响原数据) 不可变类型传递引用 python3不可变类型 Number(数字) St
zhaoolee
2018/04/19
1.9K0
Python中 传递值 与 传递引用 的区别
Java中的按值传递
这个时候可能会有疑问了,为什么add方法可以修改List数组,但是append和addNum却没有修改传进来的值
俺也想起舞
2019/07/24
1.8K0
详解Java中的值传递
如果大家学过c++,那这块肯定是明白的,但是Java中没有引用传递,在编程语言中,将实参传递给方法的方式有俩种就是我们即将要说的,
秋名山码神
2022/12/13
6850
详解Java中的值传递
Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递的例子:
java达人
2018/01/31
1.1K0
Java中只有按值传递,没有按引用传递!
TypeScript 非空断言
使用这种方案,问题是解决了。但有没有更简单的方式呢?答案是有的,就是使用 TypeScript 2.0 提供的非空断言操作符:
阿宝哥
2020/04/08
20.7K0
Backbonejs如何在events中传递参数
最近在用Backbonejs做个应用,至于是啥应用大家可以先猜测下,猜中无奖。这次实践应该比之前学习todos那个东西更具有实际意义。其中遇到一个问题,就是如何在event中给函数传递参数。
the5fire
2019/02/28
1.9K0
PostgreSQL中索引是否存储空值?
偶然在PostgreSQL官方文档上看到这句话:an IS NULL or IS NOT NULL condition on an index column can be used with a B-Tree index。
数据库架构之美
2021/03/16
2.4K0
MVC 控制器中传递dynamic(对象) 给视图
 有时候不想重新定义一个实体,则使用 dynamic 来定义匿名类型。 //匿名类型 传递到前台 Model dynamic viewModel = n
纯粹是糖
2018/03/14
8810
MVC 控制器中传递dynamic(对象) 给视图
值传递与引用传递
“哥,说说 Java 到底是值传递还是引用传递吧?”三妹一脸的困惑,看得出来她被这个问题折磨得不轻。
沉默王二
2021/06/16
1.2K0
值传递与引用传递
点击加载更多

相似问题

如何在非空字段中存储空值?

32

如何在excel中首先获得非空/空值

12

在Tapestry中呈现requestParameter

10

非空属性引用“我的控制器”中的空值或瞬态值。

14

如何在空向量中传递值?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文