关于使用JSONObject的问题

在Controller中,为了给客户端直接返回json数据,使用了JSONObject,想直接返回Json格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@Controller
public class RegisterController {
@Autowired
private UserServiceImpl userServiceImpl;
@ResponseBody
@RequestMapping("/register")
public JSONObject register(HttpServletRequest request, HttpServletResponse response)throws IOException {
String userName = request.getParameter("userName");
String userPassword = request.getParameter("userPassword");
String userRight = request.getParameter("userRight");
String telephoneNum = request.getParameter("telephoneNum");
String registerTime = new nowTime().nowTime();

int selectResult=0;//判断是否已经存在
long addResult = 0;//判断添加是否成功

if(userServiceImpl.selectUserByuserName(userName) == null){
selectResult=0;

User user = new User();
user.setUserName(userName);
user.setUserPassword(userPassword);
user.setUserRight(userRight);
user.setTelephoneNum(telephoneNum);
user.setRegisterTime(registerTime);

addResult = userServiceImpl.addUser(user);
}else{
selectResult = 1;
}

if(selectResult == 1){
JSONObject result = new JSONObject();
result.put("success",false);
result.put("message","该用户名已存在!");
return result;
}else if(addResult != 0){
JSONObject result = new JSONObject();
result.put("success",true);
result.put("message","注册成功!");
return result;
}else{
JSONObject result = new JSONObject();
result.put("success",false);
result.put("message","注册失败!请稍后再试!");
return result;
}
}
}

经过测试,发现Postman测试数据是可以写入数据库的,但是Postman返回却不是result,而是

1
2
3
{
"empty": false
}

最后发现原因是:pring boot uses jackson as default serializer and you're trying to return JSONObject itself. Jackson does not know how to serialize it.If you want to return dynamic json you can use Map

具体戳这里

改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@RestController
public class RegisterController {
@Autowired
private UserServiceImpl userServiceImpl;

@RequestMapping(value = "/register",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> register(HttpServletRequest request, HttpServletResponse response)throws IOException {

………………………………

if(selectResult == 1){
Map<String,Object> result = new HashMap();
result.put("success",false);
result.put("message","该用户名已存在!");
return result;
}
else if(addResult != 0){
Map<String,Object> result = new HashMap();
result.put("success",true);
result.put("message","注册成功!");
return result;
}
else{
Map<String,Object> result = new HashMap();
result.put("success",false);
result.put("message","注册失败!请稍后再试!");
return result;
}
}
}

再次测试,成功。

:转载文章请注明出处,谢谢~