Spring

한 끝점에서 다른 요청 본문을 사용하는 방법은 무엇입니까?

기록만이살길 2021. 3. 14. 08:04
반응형

한 끝점에서 다른 요청 본문을 사용하는 방법은 무엇입니까?

1. 질문(문제점):

한 엔드 포인트의 요청 본문에서 서로 다른 xmlTypes를 소비해야하는 서비스를 빌드해야합니다.

이를 위해 다음과 같이 구현했습니다.

    @PostMapping(value="/one")
    public ResponseEntity<?> result(
            String xmlType,
            @RequestBody Object body
    ) {
        Employe employee = null; // employee object that is generated by xsd file.
        Profile profile = null; // profile object that is generated by xsd file.
        if (body instanceof Employe) {
            employee = (Employe) body;
        } else if (body instanceof Profile) {
            profile = (Profile) body;
        }
        
        // business logic 

        return ResponseEntity.accepted().build();
    }

하지만이 구현에서는 지원되지 않는 미디어 유형 오류가 발생합니다.

서비스 사용 예

  • URL : '/ domain / one? xmlType = Profile', body (requestBody) : <Profile></Profile>
  • URL : '/ domain / one? xmlType = Employee', body (requestBody) : <Employee></Employee>

특정 개체를 사용하면 작동하지만 일반 버전을 구현할 수 없습니다. 그렇다면이 기능을 어떻게 얻을 수 있습니까?

2. 해결방안:

두 가지 방법을 사용하고 params다음 덕분에 요청 매핑을 좁힐 것입니다 .

@PostMapping(value = "/one", params = "xmlType=Profile")
public ResponseEntity<?> postProfile(@RequestBody Profile body) {
    ...
}

@PostMapping(value = "/one", params = "xmlType=Employee")
public ResponseEntity<?> postEmployee(@RequestBody Employee body) {
    ...
}
65703163
반응형