[英]why is Spring Boot returning a string instead of JSON
根據這個問題,我的方法應該是通過傑克遜發送一個 JSON 對象:
但是我在客戶端收到一個字符串。
以下是相關部分:
@CrossOrigin(origins = "*")
@RestController
public class AuthController {
@PostMapping("/api/signup")
public String signup(HttpServletRequest request, HttpServletResponse response){
return "{'status':'fail', 'message':'foo'}";
}
}
你明確地說return "some string";
所以它可以滿足您的要求。
相反,您應該構造一個對象。 我將定義以下類和枚舉:
public class SignupDto {
private Status status;
private String message;
public SignupDto() {
}
public SignupDto(Status status, String message) {
this.status = status;
this.message = message;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public enum Status {
FAIL,
SUCCESS
}
}
並按如下方式使用它:
public SignupDto signup(HttpServletRequest request, HttpServletResponse response) {
return new SignupDto(SignupDto.Status.FAIL, "foo");
}
Jackson 將自動進行序列化。
雖然您對單引號是正確的,但如果您不想,您可以在不使用 DTO 的情況下實現 JSON 響應。 你可以試試這個:
@PostMapping("/api/signup")
public ResponseEntity signup(HttpServletRequest request, HttpServletResponse response) {
return ResponseEntity
.status(<http_status>)
.contentType(MediaType.APPLICATION_JSON)
.body("{\"status\":\"fail\", \"message\":\"foo\"}");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.