我們在 Oracle 資料庫中保存了一個 JSON 回應正文,稍后將檢索該回應正文以供查看。
這是保存在資料庫中的 JSON
{"parameters": [{"name": "SEATS", "value": "Q1"}, {"name": "SEATS", "value": "Q2"}, {"name": "MEMBERS", "value": "Alen"}, {"name": "MEMBERS", "value": "Sara"}], "messageTemplate": "You have booked tickets, seat numbers are Q1,Q2", "url": "", "remarks": "ticket booked"}
現在我們的視圖 API 的回應是這樣的
{ "responseBody": "{\"parameters\": [{\"name\": \"SEATS\", \"value\": \"Q1\"}, {\"name\": \"SEATS\", \"value\": \"Q2\"}, {\"name\": \"MEMBERS\", \"value\": \"Alen\"}, {\"name\": \"MEMBERS\", \"value\": \"Sara\"}], \"messageTemplate\": \"You have booked tickets, seat numbers are Q1,Q2\", \"url\": \"\", \"remarks\": \"ticket booked\"}" }
但是當除錯它來這樣
{"parameters": [{"name": "SEATS", "value": "Q1"}, {"name": "SEATS", "value": "Q2"}, {"name": "MEMBERS", "value": "Alen"}, {"name": "MEMBERS", "value": "Sara"}], "messageTemplate": "You have booked tickets, seat numbers are Q1,Q2", "url": "", "remarks": "ticket booked"}
附加資料
列說明: VARCHAR2(500)
更新
我試著列印此new JSONObject(responseBody)類似這樣的
System.out.println(new JSONObject(responseBody));
控制臺正在列印正確的 JSON 正文,但即使我使用與上述相同的邏輯,仍然存在特殊字符。
Spring Boot部分 控制器
@RestController
@RequestMapping("v1/booking")
public class BookingReportsController {
@Autowired
private BookingReportsService service;
@GetMapping(value = "/more-info/{tnxId}", produces = MediaType.APPLICATION_JSON_VALUE)
public Booking moreInfo(@PathVariable(name = "tnxId") String tnxId) {
return service.moreInfo(tnxId);
}
}
我們嘗試回傳兩者Booking,ResponseEntity<Booking>但結果是一樣的。
這是我們的回應 bean
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Booking implements Serializable {
private static final long serialVersionUID = 7480161196626214557L;
private String txnId;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern =Constants.SETTLEMENT_PDF_DATE_FORMAT)
private Date txnDate;
private String userId;
private String appId;
private String appName;
private double amount;
private int status;
private String responseBody;
private String url;
// getters and setters
}
我們得到一個額外的 \ 作為轉義字符,現在如果我們美化 JSON 并將其放在多行中,我們將在回應中得到\r& \n。那么我們怎樣才能洗掉它呢?
uj5u.com熱心網友回復:
你可以這樣做
String final_json= json.replaceAll("\\\\","");
json 是包含你的 json 的字串,
我做了四個 \ 因為如果我輸入一個,它會期望像\n和\r
uj5u.com熱心網友回復:
TL; DR
只是注釋private String responseBody;有@JsonRawValue如下:
@JsonRawValue
private String responseBody;
解釋
因為 的值responseBody是一個 JSON 字串,@RestController并且會自動將 的回傳物件序列moreInfo化為HttpResponse。這就是為什么您的回應正文中有“額外的特殊字符”!
因此,最簡單的方法(通過使用Jackson)是注釋那些您不想再次序列化的欄位@JsonRawValue。
有關更多資訊,請參閱 @JsonRawValue。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/409408.html
標籤:
