簡體   English   中英

Spring 開機錯誤 json 值

[英]Spring Boot wrong json value

我在以 json 格式返回 object 時遇到問題。 這是我的 function 返回一個 json object:

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

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 class

    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();
    }
}

您可以更新 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"}作為請求主體傳遞時,上面的代碼將自動將其正確反序列化為代碼屬性設置為“hello world”的CodeDto object 實例。

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM