Ich fing an Springfeder zu lernen und ich bin mit Problemen konfrontiert. Ich habe folgenden Code:Spring MVC: Komplexes Objekt als Parameter
@RestController
public class UserController {
@RequestMapping("/")
public String getMessageInfo(Message message) {
return "Id is " + message.getId() + ", message is " + message.getMessage() + ", parameter good is " + message.isGood();
}
}
Klasse Nachricht:
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;
}
}
Und wenn ich versuche, so etwas zu tun:
RestTemplate request = new RestTemplate();
String info = request.getForObject("http://localhost:8080/?id=4", String.class);
Wert von id
ignoriert. Das gleiche Problem tritt auf, wenn ich eine Anfrage mit einem booleschen good
Parameter absende (zum Beispiel localhost:8080/?good=true
). Es heißt der Standardkonstruktor anstelle von Message(boolean)
/. Aber wenn ich etwas wie localhost:8080/?message=1234
mache, wird es nicht ignoriert. Kannst du mir erklären, was das Problem ist?
Und noch eine Frage: kann ich Instanz der Klasse Message
zu auf andere Weise als localhost:8080/?message=1234&good=true&id=145
senden? Wenn ich mehr als 3 Parameter habe? Zum Beispiel, wenn die Klasse Message
100 Parameter hat?
Sie vermissen die Annotation RequestParam oder ModelAttribute, wenn es sich nicht um einen Tippfehler handelt? –
Ich schrieb 'getMessageInfo (@ModelAttribute (" Nachricht ") Nachricht)' aber nichts geändert. – Anna
Spring ruft immer den Standardkonstruktor auf und verwendet für die Parameter die verfügbaren Setter. Wie Sie nicht haben, wird nichts von der Anfrage weitergegeben werden. Die Bindung funktioniert nur mit einer Klasse, die der Java-Spezifikation entspricht. –