簡體   English   中英

Springboot API返回空響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM