org.json JSONObject从Spring Boot控制器返回的同时向JSONObject添加了额外的对象

时间:2018-10-12 07:47:50

标签: java spring-boot org.json

我从Spring Boot控制器(1.5.16.RELEASE)返回org.json JSONObject。我里面有一个额外的地图对象。

我的代码-

@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>

期望的杰森

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

我正在获取JSON

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

我不知道为什么我在JSONObject中获得了额外的地图对象。

1 个答案:

答案 0 :(得分:0)

我认为问题在于默认的Springboot JSON序列化器是Jackson,它不知道如何处理JSONObject,因此将其包装到密钥为{{1}的Map<String, Object>中},则值为您的map。 就您而言,仅使用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); }

json.toString