컨트롤러가 있어도 Accept가 맞지 않으면 406이 난다
JSON API가 Accept: text/plain에서 406이 되는 이유를 실제 Spring MVC로 비교한다. produces에서 메서드 선택이 막힌 경우와 DTO 반환 뒤 converter에서 막힌 경우를 구분하고, 클라이언트가 요구하는 응답 형식을 맞추는 방법을 설명한다.
빌드노트
Spring Boot 카테고리의 글입니다.
총 48개의 글
JSON API가 Accept: text/plain에서 406이 되는 이유를 실제 Spring MVC로 비교한다. produces에서 메서드 선택이 막힌 경우와 DTO 반환 뒤 converter에서 막힌 경우를 구분하고, 클라이언트가 요구하는 응답 형식을 맞추는 방법을 설명한다.
proxyBeanMethods=false에서 @Bean 메서드를 직접 호출하면 등록된 singleton과 별도의 객체가 생길 수 있다. 독립 컨텍스트 네 조건의 생성 수와 == 결과를 비교하고, 두 팩터리 메서드를 매개변수 주입으로 연결하는 수정안을 설명한다.
Spring Boot 설정이 그대로일 때 JVM에 변수 자체가 없는 경우, 이름이 키에 연결되지 않은 경우, 명령행에 덮인 경우를 구별한다. 다섯 실행의 값·출처와 짧은 한 키 진단 코드로 확인하고, DEMO_ITEM_PRICE도 바인딩된 반례를 함께 설명한다.
JSON 헤더가 맞아도 본문 0바이트와 {}는 다르게 처리된다. MockMvc에서 응답·예외·컨트롤러 호출을 비교하고, required=false의 null 처리와 깨진 JSON이 여전히 400인 이유를 설명한다.
Spring Boot의 Duration 속성에서 단위 없는 30이 30ms로 바인딩되는 이유를 확인한다. 실제 getter 출력과 단위 선언 유무의 비교를 바탕으로 30s·PT30S를 쓰는 경우와 @DurationUnit으로 기존 숫자의 의미를 유지하는 경우를 구별한다.
Spring MVC의 @RequestParam 기본값은 누락과 빈 문자열을 합친다. MockMvc에서 String·Integer·int의 여섯 입력과 두 커스텀 바인더를 비교하고, 누락만 허용하려면 원래 문자열이 남아 있을 때 검증해야 하는 이유를 설명한다.
Spring MVC에서 tag=a,b는 두 원소가 되지만 tag=a,b&tag=c는 첫 값의 쉼표가 남는다. 원문 배열·List·String[]·MultiValueMap의 실행 결과와 변환 경로를 비교하고, 쉼표를 데이터로 보존할 입력 계약을 고른다.
singleton에 직접 주입한 prototype은 메서드를 다시 호출해도 같은 객체다. 짧은 생성자 수정과 작업 시 ObjectProvider 조회를 비교하고, 실제 ID·참조·생성 수로 생성자 캐시와 singleton 대상의 재사용도 구분한다.
CachePut은 캐시에 같은 키가 있어도 본문을 실행하고 반환값으로 갱신한다. Spring 프록시와 메모리 캐시에서 실행 횟수·반환값·저장값을 비교하고, 조회 생략이 목적이면 Cacheable로 바꾸는 기준을 확인한다.
@ConditionalOnProperty는 기본으로 키가 있고 값이 false가 아닐 때 통과한다. 네 입력 상태의 실제 빈 생성 결과를 비교하며 havingValue로 값을 요구하는 조건과 matchIfMissing으로 누락을 허용하는 조건을 구별한다.
Spring MVC의 전체 헤더 Map은 이름마다 첫 값만 받는다. 실제 컨트롤러 인자와 조회를 MultiValueMap 또는 HttpHeaders의 목록 조회로 바꾸는 위치를 짚고, 합성 X-Item 두 값과 쉼표 문자열 하나의 실행 결과를 비교한다.
Spring MVC에서 application/json을 지정해도 String 반환은 원문으로 쓰일 수 있다. 실제 MockMvc에서 본문 바이트·선택된 converter·JSON 값 종류를 비교하고, DTO·JSON 문자열 값·평문 중 응답 계약에 맞는 반환 타입을 고른다.