我构建了一个简单的Springboot API,它连接到包含一些测试数据的H2 db。但是,当我点击API端点时,我得到一个空响应。
[{}]
当我调试我的应用程序时,控制器返回的用户对象包含我期望的用户。
UserController.java
@RestController
@RequestMapping("api/user")
public class UserController {
private UserService userService;
public UserController(@Autowired UserService userService){
this.userService = userService;
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public Set<User> getAllUsers(){
final Set<User> users = userService.getAllUsers();
return users;
}
}
UserRepo.java
public interface UserRepository extends CrudRepository<User, Long> {
@Query("SELECT usr from User usr")
Set<User> getAllUsers();
}
UserService.java
public interface UserService {
Set<User> getAllUsers();
}
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
private final UserRepository repository;
public UserServiceImpl(@Autowired UserRepository userRepository){
this.repository = userRepository;
}
@Override
public Set<User> getAllUsers(){
final Set<User> users = repository.getAllUsers();
return users;
}
}
User.java
@Entity
@Getter
public class User {
@Id
private Long id;
private String username;
private String firstname;
private String lastname;
private String email;
private String role;
private String premium;
}
答案 0 :(得分:0)
这是一个相当奇怪的问题,我仍然无法确定。但是,删除lombok的@getter
和@setter
批注,然后实施传统的批注,可以解决此问题。
答案 1 :(得分:0)
您必须将User
的类成员设置为公共,以允许杰克逊序列化它们,即
// User.java
@Entity
public class User {
@Id
public Long id;
public String username;
public String firstname;
public String lastname;
public String email;
public String role;
public String premium;
}
注意:如果您不想序列化某个字段,请使用@JsonIgnore
而不是将其设置为私有,例如</ p>
@Entity
public class User {
...
@JsonIgnore
public String role;
...
}
答案 2 :(得分:-2)
只需删除final,然后将Set更改为List。 而你真的不需要这样做:
public UserController(@Autowired UserService userService)
只需删除此方法,然后将Autowired
添加到userService
归档。
因为最终对象不能转换为json字符串。
删除它:
produces = MediaType.APPLICATION_JSON_VALUE</h3>