Весна получить MediaType полученного тела - PullRequest
0 голосов
/ 17 апреля 2019

После этого ответа Я настроил свой метод в контроллере следующим образом:

@PostMapping(path = PathConstants.START_ACTION, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public ResponseEntity<BaseResponse<ProcessInstance>> start(@PathVariable String processDefinitionId,
            @RequestBody(required = false) String params)

Теперь мне нужно вести себя по-разному в соответствии с моим @RequestBody, принадлежащим к одному или другому типу MediaType, поэтому мне нужно знать, является ли мое тело params J-кодированным. Есть ли способ сделать это?

1 Ответ

2 голосов
/ 17 апреля 2019

Вы можете просто вставить заголовок Content-Type.

    @PostMapping(path = "/{processDefinitionId}", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public ResponseEntity<String> start(@PathVariable String processDefinitionId,
                                        @RequestBody(required = false) String params,
                                        @RequestHeader("Content-Type") String contentType) {
        if (contentType.startsWith(MediaType.APPLICATION_JSON_VALUE)) {
            System.out.println("json");
        } else {
            // ...
        }
        return ResponseEntity.ok(params);
    }

Но я бы предложил разделить этот метод на два метода с разными значениями потребления:

    @PostMapping(path = "/v2/{processDefinitionId}", consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> startV2Json(@PathVariable String processDefinitionId,
                                        @RequestBody(required = false) String params) {
        return ResponseEntity.ok(params);
    }

    @PostMapping(path = "/v2/{processDefinitionId}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public ResponseEntity<String> startV2UrlEncoded(@PathVariable String processDefinitionId,
                                        @RequestBody(required = false) String params) {
        return ResponseEntity.ok(params);
    }
...