>

내가 제공하는 컨트롤러가 있다고 가정합니다.가져 오기Bean을 요청하고 반환하여 JSON으로 직렬화되며 예외 처리기를 제공합니다.IllegalArgumentException.그것은 서비스에서 제기 될 수 있습니다 :

@RequestMapping(value= "/meta/{itemId}", method= RequestMethod.GET, produces= MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public MetaInformation getMetaInformation(@PathVariable int itemId) {
    return myService.getMetaInformation(itemId);
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(value= HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleIllegalArgumentException(IllegalArgumentException ex) {
    return ExceptionUtils.getStackTrace(ex);
}

메시지 변환기는 다음과 같습니다.

<mvc:annotation-driven>    <mvc:message-converters>        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />        <bean class="org.springframework.http.converter.StringHttpMessageConverter" />    </mvc:message-converters></mvc:annotation-driven>

이제 브라우저에서 주어진 URL을 요청하면 올바른 JSON 답장이 표시됩니다. 그러나 예외가 제기되면, 분리 된 예외는 JSON으로 변환되지만, 나는 그것을 처리하는 것을 좋아할 것입니다.stringhttpmessageConverter.(결과텍스트 /일반MIME 유형). 어떻게 갔을까요?

사진을 더 완전하게 만들려면 (복잡한), 다음과 같은 핸들러가 있다고 가정 해보십시오.

@RequestMapping(value= "/version", method= RequestMethod.GET)
@ResponseBody
public String getApplicationVersion() {
    return "1.0.12";
}

이 핸들러는 반환 문자열을 둘 다로 직렬화 할 수 있습니다.mappingjackson2httpmessageConverter.stringhttpmessageConverter.통과에 따라 다름수락 유형고객이 반환 유형과 값은 다음과 같아야합니다.

+----+---------------------+-----------------------+------------------+-------------------------------------+
| NN | URL                 | Accept-type           | Content-type     | Message converter                   |
|    |                     | request header        | response header  |                                     |
+----+---------------------+-----------------------+------------------+-------------------------------------+
| 1. | /version            | text/html; */*        | text/plain       | StringHttpMessageConverter          |
| 2. | /version            | application/json; */* | application/json | MappingJackson2HttpMessageConverter |
| 3. | /meta/1             | text/html; */*        | application/json | MappingJackson2HttpMessageConverter |
| 4. | /meta/1             | application/json; */* | application/json | MappingJackson2HttpMessageConverter |
| 5. | /meta/0 (exception) | text/html; */*        | text/plain       | StringHttpMessageConverter          |
| 6. | /meta/0 (exception) | application/json; */* | text/plain       | StringHttpMessageConverter          |
+----+---------------------+-----------------------+------------------+-------------------------------------+

기존 메시지 변환기를 추가하거나 재정의 할 수 있습니다. 기본값을 완전히 바꾸려면 "register-defaults= false"속성을 사용하십시오.

Simon Logic2021-04-30 05:03:13

관련 문제 : github.com/spring-projects/spring-framework/issues/20865.

Lucas Cimon2021-04-30 12:29:37

관련 자료

  • 이전 로드 테스트를 위해 빠른 소켓 작성 및 소멸을 시도 할 때"javanetbindexception - 이미 사용중인 주소"
  • 다음 javascript - fabricjs - 그룹 크기를 조정할 때 객체 위치를 고정 상태로 유지