亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

忽略 POST 請求的 JSON 字段,但不應忽略 GET 請求

忽略 POST 請求的 JSON 字段,但不應忽略 GET 請求

萬千封印 2022-06-23 20:07:00
我是 Spring Boot 框架的新手。我有一個如下模型:   public  class Process{   private String processId;   private ProcessStatus status;   private hostname;   private errorMessage;}發布來自控制器的調用:@RequestMapping(value = "/process", method = RequestMethod.POST,                    consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })    public HttpStatus updateProcess (@RequestBody Process process)    {        try {            processService.updateProcess(process);            return HttpStatus.OK;        } catch (Exception e)             throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,e,                e);        }    }獲取流程電話:@RequestMapping(value = "/process", method = RequestMethod.GET,                    produces = { MediaType.APPLICATION_JSON_UTF8_VALUE })    public Process getProcess (@RequestParam("processId") String processId)    {        try {            return processService.getProcess(processId);        } catch (Exception e) {            throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,                e);        }     }所以 post 由負責更新流程信息的組件 A 執行。組件 B 正在完成獲取以獲取現有進程。問題:我怎樣才能隱藏主機名和錯誤消息以獲得而不是帖子。當我做@JsonIgnore 時,它會忽略這兩個請求。
查看完整描述

2 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您可以使用JsonView功能。您可以定義幾個不同的級別:


public class Views {

    public static class Public {

    }


    public static class Internal extends Public {

    }

}

現在,您需要注釋您的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;

}

當您已經擁有它時,您需要注釋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)

當然,您可以為視圖選擇更好的名稱。以上只是閱讀鏈接文章后的示例用法。我沒有測試它,但你應該得到一般的想法。


查看完整回答
反對 回復 2022-06-23
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

最簡單的方法是使用另一個 DTO(數據傳輸對象)類,它不包含您不想發回的字段。在您的情況下,這意味著創建一個ProcesDTO類,如下所示:


public class ProcessDTO {

   private String processId;

   private ProcessStatus status;

   private hostname;

}

Process此外,這意味著要在和之間進行映射ProcessDTO,這可以手動完成,也可以使用某種庫來完成,例如org.modelmapper。


假設這Process是某種實體類,無論如何都不建議直接使用它們來發回 JSON 數據。


查看完整回答
反對 回復 2022-06-23
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號