Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- b3-propagation
- SpringMVC
- spring MVC
- asyncconfigurer
- DeferredImportSelector
- CompletableFuture
- java.util.list
- list
- elasticsearch
- HashMap
- asynccustomautoconfiguration
- traceasynccustomautoconfiguration
- traceId
- awssecretsmanagerpropertysources
- micrometer tracing
- kotlin
- java lambda
- java list
- spring
- map
- Sleuth
- spring3 spring2 traceid
- Spring Boot
- EnableWebMvc
- jpa
- java
- Spring JPA
- aws secretmanager
- @FunctionalInterface
- ResponseBody
Archives
- Today
- Total
du.study기록공간
Spring controller response when first char lowerCase and next upperCase 본문
스프링
Spring controller response when first char lowerCase and next upperCase
du.study 2021. 8. 15. 19:16728x90
해당 블로그에도 나와있는 이슈
최근 개발을 하던 도중 조금 특이한 경우를 만났습니다.
간단한 예제코드
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class TestController{
@GetMapping("/test1")
fun test1() : ResponseDto{
return ResponseDto("test")
}
}
class ResponseDto(val mId: String)
위와 같은경우 예상되는 response로 mId ( I가 대문자) 를 원하였지만.. 실제 결과는 다음과 같이 나왔습니다.
{
"mid": "test"
}
오늘도 지식이 짧았음을 느낍니다.. 이부분을 파고들어가서 대체 왜 이렇게 동작하는지 살펴봤습니다.
BeanPropertyWriter 에서 prop name이 어떤식으로 가져와지는지를 확인해봤습니다.
해당부분을 보면 getMId로 앞 글자가 대문자로 치환되어있는걸 볼 수 있는데요, 실제 java로 컨버팅된 코드를 보면 ResponseDto는 다음과같이 되어있습니다.
public final class ResponseDto {
@NotNull
private final String mId;
@NotNull
public final String getMId() {
return this.mId;
}
public ResponseDto(@NotNull String mId) {
Intrinsics.checkNotNullParameter(mId, "mId");
super();
this.mId = mId;
}
}
해결방법 :
코틀린을 사용하는 경우 다음과같이 적용하면되고 자바의 경우 getter JsonProperty를 적용하면됩니다.
class ResponseDto(
@get:JsonProperty("mId")
val mId: String
)
public final class ResponseDto {
@NotNull
private final String mId;
@NotNull
public final String getMId() {
return this.mId;
}
public ResponseDto(@NotNull String mId) {
Intrinsics.checkNotNullParameter(mId, "mId");
super();
this.mId = mId;
}
}
728x90
'스프링' 카테고리의 다른 글
spring sleuth Executor를 bean으로 생성했을때 traceId가 공유되는 방식 (1) | 2022.11.10 |
---|---|
spring + h2환경에서 JPA native query를 사용했을때 맞이한 문제점 (0) | 2022.03.14 |
@JsonCreator with Spring web controller (enum) (0) | 2021.03.07 |
Spring Webflux + grpc + Armeria (1) | 2021.02.07 |
Spring boot AutoConfiguration 동작방식2 - DeferredImportSelector (0) | 2021.01.10 |
Comments