복붙노트

[SPRING] HTTP 상태 415 - POST를 수행 할 때 지원되지 않는 미디어 유형

SPRING

HTTP 상태 415 - POST를 수행 할 때 지원되지 않는 미디어 유형

그래서 Chrome에서 Postman과 함께 REST를 사용하여 POST를 시도했지만 오류가 발생하여 보내기가 실패했습니다.

내 코드와 스크린 샷의 일부가 포함되어 있습니다. 시도한 해시 맵의 쌍은 duration과 150입니다. URL은 정확하지만 미디어 유형이 허용되지 않는 이유를 모르겠습니다.

@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;
    }
}

해결법

  1. ==============================

    1.예, 그렇듯이 FormMultivaluedMapProvider (응용 프로그램 / x-www-form-urlencoded Content-Type에 대한 MultivaluedMap 읽기 처리는 MultivaluedMap 또는 MultivaluedHashMap이 아닌 MultivaluedHashMap을 허용합니다.

    예, 그렇듯이 FormMultivaluedMapProvider (응용 프로그램 / x-www-form-urlencoded Content-Type에 대한 MultivaluedMap 읽기 처리는 MultivaluedMap 또는 MultivaluedHashMap이 아닌 MultivaluedHashMap을 허용합니다.

    다음은 isReadable (런타임이 Java / Content-Type 유형의 조합을 처리하기 위해 MessageBodyReader를 찾을 때 호출되는 소스)입니다.

    @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));
    }
    

    참고로, 쓰기 측면에서, 그것은 다른 이야기입니다. isReadable이 있다면 isValibleFrom을 사용하여 메서드 매개 변수로 MultivaluedHashMap을 사용할 수있는 isWriteable 메서드를 볼 수 있습니다.

    @Override
    public boolean isWriteable(Class<?> type, Type genericType, 
                               Annotation[] annotations, MediaType mediaType) {
        return MultivaluedMap.class.isAssignableFrom(type);
    }
    
  2. from https://stackoverflow.com/questions/30204614/http-status-415-unsupported-media-type-when-doing-post by cc-by-sa and MIT license