Spring 在控制器函数中使用2个对象
我是新来的 我有两个物体Spring 在控制器函数中使用2个对象,spring,spring-mvc,spring-boot,spring-data,Spring,Spring Mvc,Spring Boot,Spring Data,我是新来的 我有两个物体 public class Phone { private long id; private String phone; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getPhone() { return phone;
public class Phone {
private long id;
private String phone;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
public class MailID {
private long id;
private String mail;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}
我已经创建了一个控制器来获取这些对象
@RestController
@RequestMapping("/person")
public class PersonController {
@RequestMapping(
value = "/mail",
method = RequestMethod.POST,
consumes = "application/json",
produces = "application/json"
)
public String getMail(@RequestBody MailID mail) {
System.out.println(mail.getId()+" "+mail.getMail());
return mail.getMail();
}
@RequestMapping(
value = "/phone",
method = RequestMethod.POST,
consumes = "application/json",
produces = "application/json"
)
public String getPhone(@RequestBody Phone phone) {
System.out.println(phone.getId()+" "+phone.getPhone());
return phone.getPhone();
}
@RequestMapping(
value = "/info",
method = RequestMethod.POST,
consumes = "application/json",
produces = "application/json"
)
public String mysqlToEs( @RequestBody MailID mail, @RequestBody Phone phone) {
System.out.println(mail.getMail()+" "+phone.getPhone());
return mail.getMail()+" "+phone.getPhone();
}
}
这个命令很好用。它完全接受MailID对象值
curl -X POST -d '{"id":1, "mail":"abc@yahoo.com"}' -H "Content-type:application/json" http://localhost:8084/person/mail
curl -X POST -d '{"id":1, "phone":"3333212"}' -H "Content-type:application/json" http://localhost:8084/person/phone
它完全接受Phone对象的值
curl -X POST -d '{"id":1, "mail":"abc@yahoo.com"}' -H "Content-type:application/json" http://localhost:8084/person/mail
curl -X POST -d '{"id":1, "phone":"3333212"}' -H "Content-type:application/json" http://localhost:8084/person/phone
现在我想在一个POST请求中传递MailID和Phone值。我尝试了以下要求。但它不起作用
curl -X POST -d '{"phone":{"id":1, "phone":"3333212"}}' -H "Content-type:application/json" http://localhost:8084/person/info
我已经读到,我们可以通过创建一个新对象来解决这个问题,该对象的字段为MailId
和Phone
。这是正确的做法吗?有没有其他方法可以让我在一个函数中访问两个对象参数
谢谢如果请求正文中有多个对象,则必须使用
@RequestPart
注释代替
@RequestBody
为了实现这一点,您必须命名字段(如果是HTML表单,则很容易,但不确定如何在curl中命名)
要考虑的是,这是REST API的坏样式,因为它将是不对称的(创建一个帖子,但得到两种不同的方法)。如果使用两个字段创建一个对象,则该对象将再次对称
因为这样,我会考虑在一个调用中不做两个创建操作。 如果请求正文中有多个对象,则必须使用
@RequestPart
注释代替
@RequestBody
为了实现这一点,您必须命名字段(如果是HTML表单,则很容易,但不确定如何在curl中命名)
要考虑的是,这是REST API的坏样式,因为它将是不对称的(创建一个帖子,但得到两种不同的方法)。如果使用两个字段创建一个对象,则该对象将再次对称
因为这样,我会考虑在一个调用中不做两个创建操作。 我建议您创建一个新对象来容纳另外两个对象。大概是这样的:
class MyNewObjectRequest{
private MailID mailId;
private Phone phone;
... some getters/setters
}
{"emailId" : {"id":1, "mail":"abc@yahoo.com"}, "phone" : {"id":1, "phone":"3333212"}}
然后您需要更改控制器以接收支架
@RequestMapping(
value = "/info",
method = RequestMethod.POST,
consumes = "application/json",
produces = "application/json"
)
public String mysqlToEs( @RequestBody MyNewObjectRequest rq) {
System.out.println(rq.getEmailId().getMail()+" "+rq.getPhone().getPhone());
return rq.getEmailId().getMail()+" "+rq.getPhone().getPhone();
}
请求json如下所示:
class MyNewObjectRequest{
private MailID mailId;
private Phone phone;
... some getters/setters
}
{"emailId" : {"id":1, "mail":"abc@yahoo.com"}, "phone" : {"id":1, "phone":"3333212"}}
我建议您创建一个包含其他两个的新对象。大概是这样的:
class MyNewObjectRequest{
private MailID mailId;
private Phone phone;
... some getters/setters
}
{"emailId" : {"id":1, "mail":"abc@yahoo.com"}, "phone" : {"id":1, "phone":"3333212"}}
然后您需要更改控制器以接收支架
@RequestMapping(
value = "/info",
method = RequestMethod.POST,
consumes = "application/json",
produces = "application/json"
)
public String mysqlToEs( @RequestBody MyNewObjectRequest rq) {
System.out.println(rq.getEmailId().getMail()+" "+rq.getPhone().getPhone());
return rq.getEmailId().getMail()+" "+rq.getPhone().getPhone();
}
请求json如下所示:
class MyNewObjectRequest{
private MailID mailId;
private Phone phone;
... some getters/setters
}
{"emailId" : {"id":1, "mail":"abc@yahoo.com"}, "phone" : {"id":1, "phone":"3333212"}}
我不确定,但尝试将传递映射作为函数参数。然后,您将需要通过解析jsonI手动构造对象。我不确定,但尝试将传递映射作为函数参数。然后,您将需要通过解析jsoni试图使用@RequestPart来手动构造对象。。但是我没有得到curl命令,所以我创建了一个包含两个字段的对象,这是更好的方法。在html中,@RequestPart对应于我试图使用@RequestPart进行的“encoding=multipart/formdata”。。但是我没有得到curl命令,所以我创建了一个包含两个字段的对象,这是更好的方法。在html中,@RequestPart对应于“encoding=multipart/formdata”