2015-05-13 95 views
2
時不支持的媒體類型

所以我試圖做一個POST使用REST與鉻Postman,但在我點擊發送了錯誤HTTP狀態415 - 做POST

HTTP狀態415 - 不支持的媒體類型

我的代碼和部分屏幕截圖包含在內,我試過的hashmap對是duration150。我確信網址是正確的,但不知道爲什麼媒體類型不被接受。

@Path("activities") 
public class ActivityResource { 

    @POST 
    @Path("activity") 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) 
    public Activity createActivityParams(MultivaluedHashMap<String,String> formParams){ 
     return null; 
    } 
} 

enter image description here

enter image description here

+0

我知道你的名字是HashMap,所以你可能會喜歡HashMap,但你有沒有嘗試過多值圖?我還沒有測試,但它可能是讀者只接受超類型而不是它的isAcceptable方法中的子類型。這只是一個猜測。現在不要打開我的工具箱:-) –

回答

2

呀所以我懷疑,在FormMultivaluedMapProvider(負責處理MultivaluedMap閱讀application/x-www-form-urlencoded的Content-Type只允許MultivaluedMap<String, String>MultivaluedMap,不MultivaluedHashMap,你有。

下面是isReadable源(這就是所謂的欠幅時ime尋找MessageBodyReader來處理Java/Content-Type類型的組合。

@Override 
public boolean isReadable(Class<?> type, Type genericType, 
          Annotation[] annotations, MediaType mediaType) { 
    // Only allow types MultivaluedMap<String, String> and MultivaluedMap. 
    return type == MultivaluedMap.class 
      && (type == genericType || mapType.equals(genericType)); 
} 

由於作爲邊注,在寫作方面,這是一個不同的故事,你可以看到isWriteable方法,使用isAssignableFrom,這要是isReadable了,你就可以使用MultivaluedHashMap爲你的方法參數。

@Override 
public boolean isWriteable(Class<?> type, Type genericType, 
          Annotation[] annotations, MediaType mediaType) { 
    return MultivaluedMap.class.isAssignableFrom(type); 
}