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