gpt4 book ai didi

java - Spring MVC @ResponseBody 问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:22 28 4
gpt4 key购买 nike

我刚刚学习spring mvc几天,有一些我写的代码:

@RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET}, consumes = "*/*", produces = "application/json")
@ResponseBody
public Object userLogin(@RequestParam(value = "userName") String userName,@RequestParam(value = "password") String password) {

String password2 = userService.selectUserPassword(userName);

JSONObject object = new JSONObject();
if(password2.equals(password)){
object.put("login", "true");
}else{
object.put("login", "false");
}
return object;

}

它不起作用,但如果我将代码更改为这样

public  Map<String, String> userLogin(@RequestParam(value = "userName") String userName,
@RequestParam(value = "password") String password) {

String password2 = userService.selectUserPassword(userName);

Map<String, String> map = new HashMap<String, String>(1);
//JSONObject object = new JSONObject();
if(password2.equals(password)){
map.put("login", "true");
}else{
map.put("login", "false");
}
return map;

}

然后就可以了。所以我想知道为什么?

最佳答案

要了解两种方法之间的差异,请注意以下内容

  • @ResponseBody注解表示返回类型写入响应体。

  • Spring 使用适当的 HttpMessageConverter 将返回的对象转换为响应主体。

  • 由于您已指定 Produces = "application/json",因此将启动的转换器是 MappingJackson2HttpMessageConverter 一个 HttpMessageConverter 实现,可以使用 Jackson 的 ObjectMapper 读取和写入 JSON

这是 Spring MVC 自动执行的一个强大功能,它解析表示并自动转换。

在您的第一种方法中,您尝试手动执行此操作,这是不需要的并且是错误的。框架尝试的是将 JsonObject 转换为 JSON 表示形式,这要么失败,要么为您提供包含 JsonObject 类字段的 JSON 属性。

在后面的方法中,您将值填充到 Map 中,并让 Spring MVC 转换为 JSON。由于 Jackson 库知道如何将 Map 转换为 JSON,因此您后面的方法可以正常工作

关于java - Spring MVC @ResponseBody 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291568/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com