바로 직전에 포스팅한 c# get / post를 연습하다가 골치 아픈 문제가 있었다.

 

c#쪽에서 객체를 json 형태로 파싱 한 뒤 api 요청을 보냈는데 서버에서 도저히 json 데이터를 못 읽어오는 것이다.

 

 

당시 서버 쪽 세팅은 다음과 같았다.

JSON 매핑 할 VO

 

post 요청을 받는 controller

 

 

 

그리고 c#쪽 세팅은 다음과 같았다.

 

 

이렇게 하면 c# 쪽에서 {"id" : "1111", "password" : "2222"}로 보내서

서버에서 requestbody 매핑이 될것이라 예상했는데 결과는 null이었다.

 

뭐가 문제 인지 몰라서 postman으로 테스트를 해보았다.

이렇게 실험했는데 매핑이 제대로 되었다.

그래서 머리가 터지기 시작했다.

 

그 와중에 차이를 발견했는데 내가 기대한 JSON 형태는 {"id" : "1111", "password" : "2222"} 였지만

막상 C#에서는 {"Id" : "1111", "Password" : "2222"} 로 key의 맨 앞자리가 대문자 형태인게 문제인 것이었다.

 

그래서 이걸 어떻게 바꿔줘야하는지 머리를 끙끙 싸맨 끝에 한 블로그에서 해결책을 발견했다.

 

https://blog.aliencube.org/ko/2015/03/24/tips-for-json-net-when-serialising-objects/

 

Json.NET을 이용한 객체 Serialisation에 쓰이는 소소한 팁들

Json.NET은 닷넷 어플리케이션 개발시 가장 자주 쓰이는 라이브러리들 중 하나이다. 심지어 MS도 ASP.NET MVC 라이브러리를 만들 때 자체 JavaScriptSerializer를 쓰지 않고 Json.NET 라이브러리를 이용할 정도

blog.aliencube.org

 

여기서 사용한 방식대로 JSON 객체 네이밍 세팅을 해주었더니 제대로 데이터가 전송되었다.

 

다른 사람들은 스프링부트에서 Lombok 때문에 문제가 생긴 케이스라서 나랑 너무 상황이 달라 당황스러웠다.

 

 

추가한 코드

var settings = new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() };
string jsonUserinfo = JsonConvert.SerializeObject(staff1, settings);

+ Recent posts