강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

kyoung joon kim님의 프로필 이미지
kyoung joon kim

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

Get으로 복잡한 형태의 파라미터를 전달 받을 수 없을까요?

작성

·

492

0

안녕하세요 선생님.

 

Get 메소드로 넘어오는 데이터들을

@Data 어노테이션을 붙인 클래스로 받았는데요

 

http://localhost:8080/test?my_list=[{"name": "kk", "age": 20}, {"name": "bb", "age":19}]&...기타파라미터들...

위와 같이 요청을 하면 뒤에 기타파라미터들은 잘 받을 수 있는데

my_list(json) 이 추가되면 아래와 같은 bad request 가 발생합니다.
- The valid characters are defined in RFC 7230 and RFC 3986
- The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

json 이 포함된 데이터를 get 메소드의 파라미터로 받을 수 있는 방법이 있는지 궁금합니다.

감사합니다.

답변 5

0

인코딩해서 보내달라고 외부서버쪽에 요청했습니다!

답변감사합니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

아.. 그렇게 우회하셨군요. 이건 요청이 스팩을 위반한거라 요청 보내는 쪽에서 인코딩 해서 보내라고 해야 맞는거긴합니다.

0

요청 데이터는 외부서버에서 정해진 형식으로 오는것이라서 제가 수정할 수 없었습니다.

특수문자 [, ] 같은 데이터를 받기 위해서 다음과 같은  Config 추가해봤습니다.

지금보니 TomcatWebServerCustomizer 는 그냥 클래스 이름이였네요.

@Configuration
public class TomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers((TomcatConnectorCustomizer)
                connector -> connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}"));
    }
}

0

백기선님의 프로필 이미지
백기선
지식공유자

에러 메시지를 보니 인코딩을 안하고 보내셔서 그런거 같네요. JSON을 요청 파라메터에 담아 보내실꺼면 우선 인코딩을해서 하시고 받을 때는 Converter나 Formatter를 사용해서 해당 디코딩 이후에 JSON 문자열을 원하는 타입의 객체로 변환할 수 있을거 같습니다.

톰캣 웹 서버 커스터마이저로 우회하신 방법은 어떻게 하신건지 궁금하네요. 코드를 공유해 주시면 살펴보겠습니다.

0

TomcatWebServerCustomizer를 이용해서 우회 했는데 더 깔끔한?? 방법이 있는지도 궁금합니다.

kyoung joon kim님의 프로필 이미지
kyoung joon kim

작성한 질문수

질문하기