Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在控制器函数中使用2个对象_Spring_Spring Mvc_Spring Boot_Spring Data - Fatal编程技术网

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”