Я просто узнал о весне 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, которая может читать и писать JSON с использованием Jacksons ObjectMapper
это мощная функция, которую Spring MVC выполняет автоматически, она разрешает представление и автоматически преобразуется.
В первом методе вы пытались сделать это вручную, что не нужно и неправильно. Что было сделано в рамках каркаса, так это преобразование вашего JsonObject в JSON-представление, которое либо не работает, либо дает вам свойства JSON, содержащие записи класса JsonObject.
В более позднем методе вы выбрасывали значения на карту, а Spring MVC конвертировали в JSON. Поскольку библиотеки Jackson знают, как преобразовать карту в JSON, ваш более поздний метод работает без проблем