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

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

Spring Boot中的ObjectMapper可以讀取字符串,但在解析標頭時不起作用

Spring Boot中的ObjectMapper可以讀取字符串,但在解析標頭時不起作用

神不在的星期二 2023-12-13 17:08:07
我試圖在 spring boot 中將枚舉值作為標頭參數提供給我的其余端點@RestController。為此,我將杰克遜庫放入我的build.gradle文件中,因為自動生成的枚舉使用了杰克遜注釋。我無法更改枚舉代碼(它是根據 openapi 規范自動生成的)。它看起來像這樣:public enum DocumentTypes {  APPLICATION_PDF("application/pdf"),  APPLICATION_RTF("application/rtf"),  APPLICATION_VND_OASIS_OPENDOCUMENT_TEXT("application/vnd.oasis.opendocument.text"),  APPLICATION_VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT("application/vnd.openxmlformats-officedocument.wordprocessingml.document"),  APPLICATION_VND_MS_WORD("application/vnd.ms-word"),  TEXT_HTML("text/html"),  TEXT_PLAIN("text/plain");  private String value;  DocumentTypes(String value) {    this.value = value;  }  @Override  @JsonValue  public String toString() {    return String.valueOf(value);  }  @JsonCreator  public static DocumentTypes fromValue(String text) {    for (DocumentTypes b : DocumentTypes.values()) {      if (String.valueOf(b.value).equals(text)) {        return b;      }    }    throw new IllegalArgumentException("Unexpected value '" + text + "'");  }}我用來測試的其余控制器如下所示:@RestController@RequestMapping("/test")public class TestController {    @Autowired    private ObjectMapper objectMapper;    @RequestMapping(path = "", method = RequestMethod.GET)    public void test(@RequestHeader(value = "Accept", required = false) DocumentTypes targetFormat) throws IOException {        DocumentTypes value = objectMapper.readValue("\"application/pdf\"", DocumentTypes.class);    }}如果我不提供 Accept 標頭,而只是在代碼中中斷,我可以看到代碼的第一行工作正常,字符串application/pdf被轉換為,value因此ObjectMapper使用該方法完成了它的工作@JsonCreator。
查看完整描述

1 回答

?
青春有我

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

我認為這正在按設計進行。Spring 僅使用 JacksonObjectMapper來轉換消息體(使用注冊的HttpMessageConverter,特別是MappingJackson2HttpMessageConverter)。

這記錄在https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-typeconversion

如果參數聲明為 String 之外的其他內容,則表示基于 String 的請求輸入(例如@RequestParam、@RequestHeader、@PathVariable@MatrixVariable@CookieValue)的某些帶注釋的控制器方法參數可能需要類型轉換。

對于這種情況,會根據配置的轉換器自動應用類型轉換

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestbody

您可以使用@RequestBody注釋通過以下方式讀取請求正文并將其反序列化為對象:HttpMessageConverter


查看完整回答
反對 回復 2023-12-13
  • 1 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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