你好,我正在使用React JS作为UI。
首先,假设我已设计出低于14个值的表格
file
isSameMail
Student_firstName
Student_lastName
Student_Email
Student_details1
Student_details2
Student_details3
Student_details4
Student_details5
Student_details6
Student_details7
Student_details8
Student_details9
我正在使用@RequestParam在Springboot API(registerStudent)中传递上述形式的值,以从UI之类的方式注册学生调用API
let data = new FormData();
data.append('file', this.state.file);
data.append('isSameMail', false);
data.append('Student_firstName', fields.firstName);
data.append('Student_lastName', fields.lastName);
data.append('Student_Email', fields.email);
data.append('Student_details1', fields.details1);
data.append('Student_details2', fields.details2);
data.append('Student_details3', fields.details3);
data.append('Student_details4', fields.details4);
data.append('Student_details5', fields.details5);
data.append('Student_details6', fields.details6);
data.append('Student_details7', fields.details7);
data.append('Student_details8', fields.details8);
data.append('Student_details9', fields.details9);
const url = http://localhost:8084/student/registerStudent';
fetch(url, {
method: 'POST',
body: data,
})
.then(res => {
if (res.ok) {
return res.json();
}
throw new Error(res.status);
})
.then(res => {
})
我正在使用spring-boot调用API,是从表单UI中获取所有上述值并将其存储在数据库中(MYSQL)
假设我正在使用API调用控制器
@CrossOrigin
@PostMapping(path = "/student/registerStudent", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Object> registerStudent(@RequestParam(value = "file", required = false) MultipartFile UploadRegistrationForm,
@RequestParam("isSameMail") boolean isSameMail, @RequestParam("Student_firstName") String firstName,
@RequestParam("Student_lastName") String lastName, @RequestParam("Student_Email") String email,
@RequestParam("Student_details1") String details1, @RequestParam("Student_details2") String details2,
@RequestParam(value = "Student_details3", required = false) Double details3,
@RequestParam(value = "Student_details4", required = false) Double details4,
@RequestParam(value = "Student_details5", required = false) Double details5,
@RequestParam(value = "Student_details6", required = false) Double details6,
@RequestParam(value = "Student_details7", required = false) Date details7,
@RequestParam(value = "Student_details8", required = false) Integer details8,
@RequestParam(value = "Student_details9", required = false) String details9) throws IOException {
}
现在您可以看到registerStudent()方法中有很多参数,但是由于我不想拥有超过7个参数的参数,除了多次定义RequestParam之外,使用@RequestParam的合适方法是什么。
注意:我们将获得1个多部分文件。
答案 0 :(得分:0)
如果我对您的理解正确,那么这可能是适合您的解决方案。
您可以创建一个对象,该对象将包含所有字段,并且在控制器方法中看起来很棒。
类似这样的东西:
package com.example;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotNull;
import java.util.Date;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class RegisterStudentReqestedParams {
private MultipartFile UploadRegistrationForm;
@NotNull
private boolean isSameMail;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
private String email;
@NotNull
private String details1;
@NotNull
private String details2;
private Double details3;
private Double details4;
private Double details5;
private Double details6;
private Date details7;
private Integer details8;
private String details9;
}
控制器现在看起来像这样:
@CrossOrigin
@PostMapping(path = "/student/registerStudent", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Object> registerStudent(@RequestBody @Valid RegisterStudentReqestedParams registerStudentReqestedParams){}