簡體   English   中英

從字符串到枚舉的轉換未調用initBinder方法

[英]initBinder method is not being called for conversion from String to Enum

我正在測試@InitBinder批注,以便可以在Web請求期間將String對象轉換為適當的Enum對象。

我創建了以下簡單的Enum

SampleEnum.java

public enum SampleEnum {
    ONE,
    TWO,
    THREE,
    FOUR,
    FIVE;
}

然后,我創建了一個擴展PropertyEditorSupport的編輯器,可以從@InitBinder代碼中調用@InitBinder

EnumPropertyEditor.java

@SuppressWarnings("rawtypes")
public class EnumPropertyEditor extends PropertyEditorSupport {
    private Class clazz;

    public EnumPropertyEditor(Class clazz) {
        this.clazz = clazz;
    }

    @Override
    public String getAsText() {
        return (getValue() == null ? "" : ((Enum) getValue()).name());
    }

    @SuppressWarnings("unchecked")
    @Override
    public void setAsText(String text) {
        Enum e = Enum.valueOf(clazz, text);
        setValue(e);
    }
}

然后,在我的控制器中,添加了@InitBinder和一個簡單的請求映射:

控制者

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(SampleEnum.class, new EnumPropertyEditor(SampleEnum.class));
}

@RequestMapping(method = POST, value = "/postSampleEnum")
@ResponseBody
public SampleEnum postSampleEnum(@RequestBody SampleEnum sampleEnum) {
    return sampleEnum;  
}

據我了解,對此控制器方法的請求應嘗試將字符串值轉換為SampleEnum對象。 但是, initBinder ,請求映射方法或EnumPropertyEditor中的任何方法都不會命中斷點。

我正在FireFox中使用RESTClient進行測試,並嘗試發送請求主體“ THREE”(我希望它可以正常工作)。 相反,無論請求主體中有什么內容,我都會收到415錯誤。 (服務器拒絕此請求,因為請求實體的格式不受請求的方法()所請求的資源支持。)

如果我將請求映射更改為采用字符串而不是SampleEnumpostSampleEnum調用SampleEnum ,並且不使用自定義編輯器(按預期方式)。

我是否缺少任何可以調用自定義編輯器代碼的內容? 繼續調試的最佳方法是什么?

首先,我忘了將application / json內容類型添加到RESTClient中的請求標頭中。 > _ <

哎呀

但是,我注意到代碼執行仍然沒有通過自定義屬性編輯器進行。 就像GriffeyDog所說的,似乎代碼僅在我切換到RequestParamModelAttribute時才執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM