有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring启动错误的json值

我在返回json格式的对象时遇到问题。这是我返回json对象的函数:

@GetMapping("/api/code/{n}")
@ResponseBody
public Code getCodeJson(@PathVariable int n) {
     Code code = codeList.get(n - 1);
     return code;
}

代码类型的对象存储在一个列表中,我想通过路径变量n访问它们。返回结果如下:

{"id":1,"code":"{\"code\":\"hello world\"}","dateTime":"2021-10-05T16:49:31.911591"}

我不知道为什么会发生这种情况,它应该返回一个json,如下所示:

{"id":1,"code":"hello world","dateTime":"2021-10-05T16:49:31.911591"}

这就是我将代码对象添加到代码列表的方式

@PostMapping("/api/code/new")
@ResponseBody
public String addNewCode(@RequestBody String code) {
    Code newCode = new Code(code);
    codeList.add(newCode);
    return "{\n" + "\"id\" : \"" + newCode.getId() + "\"\n}";
}

这是密码。java类

    public class Code {
    
    private static int currentId = 1;
    private int id;
    private String code;
    private LocalDateTime dateTime;

    public Code(String code) {
        this.id = currentId;
        this.code = code;
        this.dateTime = LocalDateTime.now();
        currentId++;
    }

    public int getId() {
        return id;
    }

    public String getCode() {
        return code;
    }

    public LocalDateTime getDateTime() {
        return dateTime;
    }

    public void setCode(String code) {
        this.code = code;
        this.dateTime = LocalDateTime.now();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您可以更新addNewCode以接受Code或新DTO CodeDto作为请求主体,并使用它。现在,您将整个请求体作为字符串获取,并将其分配给导致当前响应的代码

    @PostMapping("/api/code/new")
    @ResponseBody
    public String addNewCode(@RequestBody CodeDto code) {
        Code newCode = new Code(code.getCode());
        codeList.add(newCode);
        return "{\n" + "\"id\" : \"" + newCode.getId() + "\"\n}";
    }
    

    当您将{"code":"hello world"}作为请求体传递时,上述代码将自动将其正确反序列化为CodeDto对象的实例,代码属性设置为“hello world”

    public class CodeDto {
        private String code;
    
        public CodeDto(String code) {
            this.code = code;
        }
    
        public CodeDto() {}
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    }