0

임,사용자 정의 용지 유형은 원인 HttpMediaTypeNotSupportedException 다음과 같이 봄 부팅 1.5.2 나는 간단한 REST 컨트롤러가 사용

@RestController 
@RequestMapping 
public class UserJWTController { 

    @Inject 
    private TokenProvider tokenProvider; 

    @Inject 
    private AuthenticationManager authenticationManager; 

    @PostMapping(value = "/authenticate", produces = Version.V1_JSON_VALUE, consumes = Version.V1_JSON_VALUE) 
    public ResponseEntity<?> authenticate(final @RequestBody LoginVM loginVM, HttpServletResponse response) { 
    } 
} 

상수,

public final class Constants { 
    // API versioning 
    public static final String API_VERSION_MEDIA_TYPE = "application/vnd.test.onboarding"; 
    public static final String JSON_MIME_TYPE = "json"; 

    private Constants() { 
    } 
} 

버전,

public class Version { 
    // All versions defined here 
    public static final String V1_JSON_VALUE = Constants.API_VERSION_MEDIA_TYPE + ".v1+" + Constants.JSON_MIME_TYPE; 
    public static final MediaType V1_JSON = MediaType.valueOf(V1_JSON_VALUE); 
    public static final String V2_JSON_VALUE = Constants.API_VERSION_MEDIA_TYPE + ".v2+" + Constants.JSON_MIME_TYPE; 
    public static final MediaType V2_JSON = MediaType.valueOf(V2_JSON_VALUE); 
} 

그러나 이것은 다음과 같은 오류를 던지고있는 것으로 보입니다.

사용자 정의 용지 유형이 HttpMediaTypeNotSupportedException 원인 왜 내가 사용
WARN 37805 --- [ XNIO-2 task-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/vnd.test.onboarding.1.0+json' not supported 

컬,

curl -X POST "http://localhost:8080/api/authenticate" -H "Accepts: application/vnd.test.onboarding.1.0+json" -H "Content-Type: application/vnd.test.onboarding.1.0+json" -d '{"usernme":"test", "password":"password"}' 

{ 
    "status" : 415, 
    "error" : "Unsupported Media Type", 
    "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException", 
    "message" : "Unsupported Media Type", 
    "path" : "/api/authenticate" 
} 

는 잘 모르겠어요. Spring Boot가 이것을 자동으로 처리 할 수 ​​있어야한다고 생각했을 것입니다.

업데이트

메시지 계산기 등록,

@Bean 
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { 
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
    jsonConverter.setSupportedMediaTypes(Arrays.asList(Version.V1_JSON)); 
    jsonConverter.setSupportedMediaTypes(Arrays.asList(Version.V2_JSON)); 
    return jsonConverter; 
} 
+0

은 유효한 메시지 컨버터를 가지고 있습니까 필요하지 않았다 등기? 응용 프로그램/json 만 사용하도록 변경하면 작동합니까? 잭슨 2를 사용하고 있습니까? – alfcope

+0

참조 용 메시지 변환기를 추가했습니다. 내가 잘못 했니? – nixgadgets

+0

요청한 미디어 유형이 잘못되었습니다. 나는 답을 추가했다. Ididnt가 이것을 더 일찍 깨달을 지 명확히하지 않는다. – nixgadgets

답변

0

내가 이것을 놓친하지만이 버전을 켜고 내가 요청했다 Accept 헤더가 잘못 얼마나 확실하지.

나는 또한 다음과 같은 내용 협상을 지정했다

curl -X POST "http://localhost:8080/api/authenticate" -H "Accept: application/vnd.test.onboarding.1v+json" -H "Content-Type: application/vnd.test.onboarding.1v+json" -d '{"usernme":"test", "password":"password"}' 

그것은해야한다,

@Override 
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
    configurer.favorPathExtension(true) 
      .favorParameter(false) 
      .ignoreAcceptHeader(false) 
      .useJaf(false) 
      .defaultContentType(MediaType.APPLICATION_JSON); 
} 

와 나는 mappingJackson2HttpMessageConverter