2 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個贊
您可以使用JsonView功能。您可以定義幾個不同的級別:
public class Views {
public static class Public {
}
public static class Internal extends Public {
}
}
現(xiàn)在,您需要注釋您的POJO屬性:
public class Process{
@JsonView(Views.Public.class)
private String processId;
@JsonView(Views.Public.class)
private ProcessStatus status;
@JsonView(Views.Internal.class)
private String hostname;
@JsonView(Views.Internal.class)
private String errorMessage;
}
當(dāng)您已經(jīng)擁有它時,您需要注釋API方法。GET:
@RequestMapping(value = "/process", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE })
@JsonView(Views.Public.class)
public Process getProcess (@RequestParam("processId") String processId)
對于POST:
@RequestMapping(value = "/process", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })
@JsonView(Views.Internal.class)
public HttpStatus updateProcess (@RequestBody Process process)
當(dāng)然,您可以為視圖選擇更好的名稱。以上只是閱讀鏈接文章后的示例用法。我沒有測試它,但你應(yīng)該得到一般的想法。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個贊
最簡單的方法是使用另一個 DTO(數(shù)據(jù)傳輸對象)類,它不包含您不想發(fā)回的字段。在您的情況下,這意味著創(chuàng)建一個ProcesDTO類,如下所示:
public class ProcessDTO {
private String processId;
private ProcessStatus status;
private hostname;
}
Process此外,這意味著要在和之間進(jìn)行映射ProcessDTO,這可以手動完成,也可以使用某種庫來完成,例如org.modelmapper。
假設(shè)這Process是某種實(shí)體類,無論如何都不建議直接使用它們來發(fā)回 JSON 數(shù)據(jù)。
添加回答
舉報