编译运行环境
- Eclipse (4.10.0)
- java version "1.8.0_171"
- spring-boot-starter-parent 2.1.3.RELEASE
按照网上的各种教程,新建 Spring 工程,主要参考 https://www.cnblogs.com/LUA123/p/8110285.html,成功搭建了helloworld
但是,想要返回json数据格式的时候,出现异常。
我的代码:
调用方法
@RequestMapping("/getUser")
public User getUser() {
User user=new User();
user.name = "小明";
user.age = 22;
return user;
}
返回实体
class User{
String name;
int age;
String token;
}
异常信息
image.png
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Feb 20 15:28:40 CST 2019
There was an unexpected error (type=Internal Server Error, status=500).
No converter found for return value of type: class com.example.demo.controller.TestController$User
按照
https://www.cnblogs.com/lilinzhiyu/p/7921890.html 的解释
不理解,感觉没有一条符合的。
测试一
于是直接参考网上的代码,给实体类增加getter 和 setter
class User{
String name;
int age;
String token;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
image.png
转json时的权限问题?我在编写代码的时候,getToken写成了
getoken
,于是返回的结果是{"name":"小明","age":22,"oken":null}
,
测试二
public String getoken() {
return token;
}
结果:
{"name":"小明","age":22,"oken":null}
转json的时候,用的不是属性的名称,反而是get中的方法,让人很不理解。
测试三
去掉get set,只修改实体类,其他不变,重新测试
class User{
public String name;
public int age;
public String token;
}
image.png
看来差不多是权限问题了。
参考:
关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结
中最后一段:
这个是public变量做不到的,安全是其中一个原因,另外楼主你要是学过Hiberante和Spring的话,就会知道
一些类的变量,即使是public的,也必须写上set方法,否则就出错,框架设计的时候就这么要求的
看来还有其他原因,如果大家有遇到的话,欢迎解答。之后有看到解释的,也会贴上来,分享
网友评论