2017-03-23 12 views
0

コントローラが例外をスローしたときはいつでも、レスポンスはjson形式で返されていません。@ControllerAdviceがjsonレスポンスを返していない

@RequestMapping(value = GENERATE_IMAGE, method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE) 
public byte[] get(@PathVariable("input") String input) throws IOException { 
    if (true) { 
     throw new BusinessValidationFailureException("sdfsdfsd"); 
    } 
    ByteArrayInputStream inputStream = service.generate(input); 
    return ByteStreams.toByteArray(inputStream); 
} 

そして、私のコントローラのアドバイスは次のとおりです:それは

This application has no explicit mapping for /error, so you are seeing this as a fallback. 

私のコントローラホワイトレーベルのエラーページを与えている

がある

@ControllerAdvice 
public class WickesGlobalExceptionMapper extends ResponseEntityExceptionHandler { 

    @ExceptionHandler(BusinessValidationFailureException.class) 
    @ResponseBody 
    public ResponseEntity handleBusinessException(BusinessValidationFailureException ex, WebRequest request) { 

     ErrorResource error = new ErrorResource("InvalidRequest", ex.getMessage(), null); 

     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(MediaType.APPLICATION_JSON); 
     return handleExceptionInternal(ex, error, headers, HttpStatus.UNPROCESSABLE_ENTITY, request); 
    } 
} 

は、私はいくつかの他の可能性を試してみましたが、私は得ました常に同じエラーページ。

私は、サーバーで例外の下に取得:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:259) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:203) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) ~[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:132) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:384) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:59) [spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:136) [spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:74) [spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
+0

あなたのコントローラのアドバイスが例外をスローしていると思います。ログを追加してください。 RestControllerAdviceを使用する – reos

答えて

1

コントローラがMediaType.IMAGE_PNG_VALUEを生成するので、controlleradviceも同じMEDIATYPEを生成する必要があります。リクエストマッピングからプロダクトを削除し、レスポンスにコンテンツタイプを設定していました。あなたはhandleExceptionInternalメソッドの実装を示さなかった

@RequestMapping(value = GENERATE_BARCODE, method = RequestMethod.GET) 
public ResponseEntity get(@PathVariable("input") String barcodeInput) throws IOException { 
    byte[] resonse = service.generate(barcodeInput); 

    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.IMAGE_PNG); 
    return new ResponseEntity(resonse, headers, HttpStatus.OK); 
} 
1

、これはオブジェクトを返すのですか?

を編集してください:私は@RestControllerAdviceについて間違っていました。答えから削除しました。

タイプErrorDataのオブジェクトを返すとします(これはあなたの投稿からはっきりしません)。したがって、あなたは使用することができます:

私はこれを試してみましたが、JSONのデータオブジェクトとともに正しいスタータスコードを返しました。

+1

は、ControllerAdviceおよびResponseBodyと同じです。それは単なる1行の節約です。私はそれが違いを生むのではないかと考えています。 – krmanish007

関連する問題