Spring MVC @ResponseBody вопрос

1

Я просто узнал о весне 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; 

}

то это работает. Поэтому мне было интересно, почему?

  • 1
    Что значит "Это не работает"? Любое исключение?
Теги:
spring
spring-mvc

1 ответ

1

Чтобы понять разницу между двумя вашими методами, обратите внимание на следующее

  • Аннотирование @ResponseBody указывает, что тип возврата записывается в тело ответа.

  • Spring преобразует возвращенный объект в тело ответа с помощью соответствующего HttpMessageConverter

  • Поскольку вы указали, что produces = "application/json" конвертер, который будет использоваться, - MappingJackson2HttpMessageConverter. Реализация HttpMessageConverter, которая может читать и писать JSON с использованием Jacksons ObjectMapper

это мощная функция, которую Spring MVC выполняет автоматически, она разрешает представление и автоматически преобразуется.

В первом методе вы пытались сделать это вручную, что не нужно и неправильно. Что было сделано в рамках каркаса, так это преобразование вашего JsonObject в JSON-представление, которое либо не работает, либо дает вам свойства JSON, содержащие записи класса JsonObject.

В более позднем методе вы выбрасывали значения на карту, а Spring MVC конвертировали в JSON. Поскольку библиотеки Jackson знают, как преобразовать карту в JSON, ваш более поздний метод работает без проблем

Ещё вопросы

Сообщество Overcoder
Наверх
Меню