根据这个问题,我的方法应该是通过杰克逊发送JSON对象:
Returning JSON object as response in Spring Boot
但是我在客户端收到一个字符串。
以下是相关部分:
@CrossOrigin(origins = "*")
@RestController
public class AuthController {
@PostMapping("/api/signup")
public String signup(HttpServletRequest request, HttpServletResponse response){
return "{'status':'fail', 'message':'foo'}";
}
}
答案 0 :(得分:3)
您明确地说出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将自动进行序列化。
答案 1 :(得分:2)
虽然单引号是正确的,但是如果您不想使用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\"}");
}