开始学习spring boot,遇到问题。我有以下代码:
@RestController
public class UserController {
@RequestMapping("/")
public String getMessageInfo(Message message) {
return "Id is " + message.getId() + ", message is " + message.getMessage() + ", parameter good is " + message.isGood();
}
}
类寄语:
public class Message {
private String message;
private int id;
private boolean good;
public Message() {}
public Message(int id) {this.id = id;}
public Message(String message) {this.message = message;}
public Message(boolean good) {this.good = good;}
public Message(String message, boolean good, int id) {
this.message = message;
this.good = good;
this.id = id;
}
public String getMessage() {
return message;
}
public int getId() {
return id;
}
public boolean isGood() {
return good;
}
}
当我尝试做这样的事情时:
RestTemplate request = new RestTemplate();
String info = request.getForObject("http://localhost:8080/?id=4", String.class);
id
的值被忽略。当我发送带有 boolean 值 good
参数的请求(例如 localhost:8080/?good=true
)时,同样的问题出现了。它被称为默认构造函数,而不是 Message(boolean)
/Message(int)
。但是当我执行类似 localhost:8080/?message=1234
的操作时,它不会被忽略。你能解释一下问题是什么吗?
还有一个问题:我可以用不同于 localhost:8080/?message=1234&good=true&id=145 的方式将类
?如果我有超过 3 个参数?例如,如果 Message
的实例发送到 getMessageInfo
Message
类有 100 个参数?
最佳答案
由于您正在尝试处理一个复杂的对象,因此请从发布请求中接受您的对象。
@RequestMapping("/",method=RequestMethod.POST)
public String getMessageInfo(@RequestBody Message message) {
return message;
}
在上面的代码中,我将 method
属性设置为 POST
然后当你发出 POST
请求时它会被调用,并且我在方法 parameter
中使用 @RequestBody Message message
。它将根据传入的 request
转换并形成一个 Message 对象
,如果你不放置 @requestBody
注释,那么一个 Bean 将被 注入(inject)
到 spring 的方法,而不是从请求中形成一个。
你可以试试这段代码来发出请求
final String uri = "http://localhost:8080/";
Message message = new Message(1, "Adam",true);
RestTemplate restTemplate = new RestTemplate();
Message result = restTemplate.postForObject( uri, message, Message.class);
在发出请求时创建一个Message 对象
设置其中的每个字段,否则您最终会遇到Bad request
错误。
关于java - Spring MVC : Complex object as parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018149/