[SPRING] @GetMapping은 Accept가 정의 된 경우에도 호출됩니다.
SPRING@GetMapping은 Accept가 정의 된 경우에도 호출됩니다.
나는 Spring Framework 4.3.13과 함께 일하고있다.
나머지는 POST에 대해 다음과 같습니다.
@Controller
@RequestMapping(path="/personas")
public class PersonaRestController {
@PostMapping(consumes={MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<Void> saveOne(
@Validated @RequestBody Persona persona, ...
JUnit 및 ResultActions로 작업하는 테스트 정보 java.lang.AssertionError : No handler 오류 메시지가 표시 될 수 있으며 다음을 확인하십시오.
MockHttpServletRequest:
HTTP Method = POST
Request URI = /personas
Parameters = {}
Headers = {}
Handler:
Type = null
Async:
Async started = false
Async result = null
Resolved Exception:
Type = org.springframework.web.HttpMediaTypeNotSupportedException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 415
Error message = null
Headers = {Accept=[application/xml, application/json;charset=UTF-8]}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
saveOne 메소드가 컨텐츠 데이터가 XML 또는 JSON이 될 것으로 예상하고이 테스트 시나리오에서 Content-Type이 전송되지 않았기 때문에이 동작을 감지 할 수 있습니다.
따라서 Spring은 HttpMediaTypeNotSupportedException 인스턴스를 생성 할 것으로 예상됩니다. 그런 다음 @Test 메소드가 실패하고 java.lang.AssertionError : 핸들러 오류 메시지가 표시됩니다. 사용자 요청을 처리 할 핸들러가 없기 때문입니다.
여기까지 OK.
다시 말하지만, Rest에 관해서는, GET을 위해, 나는 다음을 가지고있다 :
@GetMapping(path="/{id}",
produces={MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE})
public @ResponseBody Persona findOneById(@PathVariable String id){
return personaService.findOneById(id);
}
다음과 같은 다른 테스트 시나리오의 경우 :
MockHttpServletRequest:
HTTP Method = GET
Request URI = /personas/100
Parameters = {}
Headers = {}
Handler:
Type = com.manuel.jordan.rest.persona.PersonaRestController
Method = public com.manuel.jordan.domain.Persona com.manuel.jordan.rest.persona.PersonaRestController.findOneById(java.lang.String)
내 인터셉터는 다음 데이터를 보여줍니다.
HttpHeaderControlInterceptor - preHandle
HttpServletRequest >
URL: http://localhost/personas/100
URI: /personas/100
HttpMethod: GET
Accept: null
Accept-Language: null
Content-Type: null
수락이 null 인 경우에도 findOneById 메서드가 처리기라고 불리는 이유가 혼란 스럽습니다. java.lang.AssertionError : No handler 오류 메시지와 HttpMediaTypeNotAcceptableException 클래스와 비슷한 것을 기대 했었습니다. 대신 findOneById 메소드가 XML 또는 JSON으로 데이터를 반환 할 수 있기 때문입니다.
없어진 물건 있어요?
해결법
-
==============================
1.나는 완전히 확신 할 수는 없지만 HTTP 1.1,
나는 완전히 확신 할 수는 없지만 HTTP 1.1,
섹션 - 10.4.7 406 여기에서 허용되지 않음을 참조하십시오.
나는 소비와 생산의 대우가 다르고 그 차이를 보는 이유라고 생각합니다.
이 그래서 여기에 질문을 참조하십시오
삭제하기 전에 답변을 게시했습니다. 기본적으로, 나는 당신의 질문을 오해했다.
from https://stackoverflow.com/questions/48054312/getmapping-is-called-even-when-accept-is-defined-how-null by cc-by-sa and MIT license