org.json JSONObject добавление дополнительного объекта в JSONObject при возврате его из весеннего загрузочного контроллера - PullRequest
0 голосов
/ 12 октября 2018

Я возвращаю org.json JSONObject из контроллера весенней загрузки (1.5.16.RELEASE).Я получаю дополнительный объект карты в нем.

Мой код -

@GetMapping(value = Constants.API_LOGIN)
    public Object login(@RequestParam String userName, @RequestParam String password) throws JSONException  {

        UserAuth userAuth = new UserAuth();
        UserAuth user = null;

        try {
            Preconditions.checkArgument(!Strings.isNullOrEmpty(userName), "empty UserName");
            Preconditions.checkArgument(!Strings.isNullOrEmpty(password), "empty password");

            userAuth.setUserName(userName);
            userAuth.setPassword(password);
            user = authService.checkAuth(userAuth);

        } catch (IllegalArgumentException ex) {
            ex.printStackTrace();
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }

        JSONObject json = new JSONObject();

        if (user != null) {
            json.put("status", true);
            json.put("message", "login success");
            return ResponseEntity.status(HttpStatus.OK).body(json);
        } else {
            json.put("status", false);
            json.put("message", "username or password doesnt match");
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(json);
        }
    }

pom.xml

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

ожидается Json

 {
        "message": "login success",
        "status": true
 }

Я получаю JSON

{
    "map": {
        "message": "login success",
        "status": true
    }
}

Я не знаю, почему я получаю дополнительный объект карты в моем JSONObject.

1 Ответ

0 голосов
/ 12 октября 2018

Я думаю, что проблема в том, что сериализатором Springboot JSON по умолчанию является Джексон, и он не знает, что делать с JSONObject, поэтому он упаковывает его в Map<String, Object>, где ключом является map, а значение является вашимJSONObject.В вашем случае было бы намного проще просто использовать карту:

@GetMapping(value = Constants.API_LOGIN)
public ResponseEntity<Object> login(@RequestParam String userName, @RequestParam String password) throws JSONException  {
    .....
    Map<String, Object> json = new HashMap<>();
    json.put("status", true);
    json.put("message", "login success");
    return ResponseEntity.status(HttpStatus.OK).body(json);
}

. Или, я думаю, альтернативным решением было бы просто вернуть String stick json.toString в теле

@GetMapping(value = Constants.API_LOGIN)
public String login(@RequestParam String userName, @RequestParam String password) throws JSONException  {
    ....
    JSONObject json = new JSONObject();
    json.put("status", true);
    json.put("message", "login success");
    return ResponseEntity.status(HttpStatus.OK).body(json.toString());
}
...