java - Spring MVC : Complex object as parameter

标签 java spring spring-mvc spring-boot

开始学习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 的方式将类 Message 的实例发送到 getMessageInfo ?如果我有超过 3 个参数?例如,如果 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/

相关文章:

java - 具有复杂 bean 结构的 openCSV

Spring @Value 转义冒号(:) in default value

java - Spring Boot-控制404未找到

使用带有转义字符的正则表达式分割 Java 字符串

java - Android 中的实时图像源?

java - 如何确保 A href 的绝对 URL 重定向

java - Apache Tiles 的更好替代品

java - 使用干净的 URL 编写应用程序

javascript - Html 地理定位未在本地主机应用程序上请求许可?

javascript - 使用 selenium webdriver 清除依赖文本框时未启用文本框