[英]Springboot API returns empty response
我構建了一個簡單的Springboot API,該API連接到包含一些測試數據的H2數據庫。 但是,當我點擊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;
}
這是一個相當奇怪的問題,我仍然無法說出哪個。 但是,刪除@getter
的@getter
和@setter
批注,然后實施傳統的批注,可以解決此問題。
您必須將User
的類成員設置為public,以允許jackson序列化它們,即,
// 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
而不是將其設置為私有,例如,
@Entity
public class User {
...
@JsonIgnore
public String role;
...
}
只需刪除final並更改“設置為列表”即可。 而且您真的不需要這樣做:
public UserController(@Autowired UserService userService)
只需刪除此方法,然后將Autowired
添加到userService
。 因為最終對象不能轉換為json字符串。 也刪除此:
produces = MediaType.APPLICATION_JSON_VALUE</h3>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.