繁体   English   中英

为什么 Spring Boot 返回一个字符串而不是 JSON

[英]why is Spring Boot returning a string instead of JSON

根据这个问题,我的方法应该是通过杰克逊发送一个 JSON 对象:

在 Spring Boot 中返回 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM