• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

20.06.09 18:02 작성 조회수 334

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를 이용해서 우회 했는데 더 깔끔한?? 방법이 있는지도 궁금합니다.