日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了用Spring解碼車身參數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在使用Spring為Slack App開發一個rest API后端。我能夠接收來自Slack的消息(斜杠命令),但我無法正確接收組件交互(按鈕單擊)。

official documentation表示:

您的操作URL將收到一個HTTP POST請求,其中包括一個負載正文參數,該參數本身包含一個應用程序/x-www-form-urlencode JSON字符串。

因此,我寫了以下@RestController

@RequestMapping(method = RequestMethod.POST, value = "/actions", headers = {"content-type=application/x-www-form-urlencoded"})
public ResponseEntity action(@RequestParam("payload") ActionController.Action action) {
    return ResponseEntity.status(HttpStatus.OK).build();
}

@JsonIgnoreProperties(ignoreUnknown = true)
class Action {

    @JsonProperty("type")
    private String type;

    public Action() {}

    public String getType() {
        return type;
    }

}

但是,我收到以下錯誤:

Failed to convert request element: org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'controllers.ActionController$Action'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'controllers.ActionController$Action': no matching editors or conversion strategy found

這是什么意思,如何解決?

json

您會收到一個包含推薦答案內容的字符串。您沒有收到JSON輸入,因為application/x-www-form-urlencoded用作內容類型,而不是application/json,如上所述:

您的操作URL將收到一個HTTP POST請求,包括有效負載
Body參數,本身包含一個應用程序/x-www-form-urlencode
JSON字符串。

因此將參數類型更改為String,并使用Jackson或任何JSON庫將String映射到Action類:

@RequestMapping(method = RequestMethod.POST, value = "/actions", headers = {"content-type=application/x-www-form-urlencoded"})
public ResponseEntity action(@RequestParam("payload") String actionJSON) {
    Action action = objectMapper.readValue(actionJSON, Action.class);? 
    return ResponseEntity.status(HttpStatus.OK).build();
}

正如pvpkiran建議的那樣,如果您可以直接在POST請求的主體中傳遞JSON字符串,而不是作為參數值,那么您可以將@RequestParam替換為@RequestBody,但情況似乎并非如此。
實際上,通過使用@RequestBody,請求的主體通過HttpMessageConverter傳遞以解析方法參數。

作為對您的評論的回應,Spring MVC并沒有提供一種非常簡單的方法來滿足您的需求:將字符串JSON映射到您的Action類。
但是,如果您真的需要自動執行此轉換,您可以使用the Spring MVC documentation中所述的冗長替代方法,例如ForMatters(我的重點是):

表示基于字符串的一些帶注釋的控制器方法參數
請求輸入?-?,例如@RequestParam@RequestHeader@PathVariable
@MatrixVariable,@CookieValue,如果
參數聲明為字符串以外的內容。

對于這種情況,類型轉換將根據
已配置的轉換器。默認情況下,簡單類型,如int、long
支持日期等。類型轉換可以通過
WebDataBinder,請參見DataBinder,或通過將ForMatters注冊到
FormattingConversionService,請參閱Spring字段格式設置。

通過為Action類創建一個格式化程序(FormatterRegistry子類),您可以將其添加到Spring Web配置as documented:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        // ... add action formatter here
    }
}

并在參數聲明中使用它:

public ResponseEntity action(@RequestParam("payload") @Action Action actionJ) 
{...}

這篇關于用Spring解碼車身參數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Spring 參數 解碼 車身
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定