我只是学习了几天的春天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;
}
然后它的工作原理。所以我想知道为什么?
答案 0 :(得分:1)
要了解两种方法之间的差异,请注意以下内容
@ResponseBody注释表示返回类型被写入响应正文。
Spring使用适当的HttpMessageConverter
由于您已指出produces = "application/json"
将启动的转换器为MappingJackson2HttpMessageConverter 可以使用Jackson的ObjectMapper读取和写入JSON的HttpMessageConverter实现
这是Spring MVC自动执行的强大功能,它解析表示并自动转换。
在您的第一种方法中,您尝试手动执行此操作,这不是必需的,也是错误的。该框架尝试将您的JsonObject转换为JSON表示,该表示失败或为您提供包含JsonObject类的文件的JSON属性。
在后面的方法中,您将值弹出到Map,然后让Spring MVC转换为JSON。由于Jackson库知道如何将Map转换为JSON,因此后一种方法可以正常运行