Как правильно использовать ResponseEntity с примитивными типами в Feign? - PullRequest
0 голосов
/ 25 октября 2019

У меня клиент-серверное приложение, использующее Feign. Серверная часть (без бизнес-логики):

@RestController
@RequestMapping
public class ControllerAddress {

    @PostMapping(value = "/address")
    @ResponseBody
    public ResponseEntity<Boolean> postAddress(@RequestBody String address) {
        return ResponseEntity.ok(true);
    }
}

Клиентская часть имеет интерфейс сервера следующим образом:

public interface ServiceInterfaceAddress {

    @Path("/address")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    ResponseEntity<Boolean> setAddress(@RequestBody String address);
}

Затем я продолжаю создавать и вызывать службу Feign с помощьюспособ

public class CallerServiceInterfaceAddress {

    public static ResponseEntity<Boolean> call(String url, String address) {
        ServiceInterfaceAddress serviceInterfaceAddress = Feign.builder()
            .contract(new JAXRSContract())
            .encoder(new JacksonEncoder())
            .decoder(new JacksonDecoder())
            .target(ServiceInterfaceAddress.class, url);
        return serviceInterfaceAddress.setAddress(address);
    }
}

Когда я получаю ответ от сервера, я получаю com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.springframework.http.ResponseEntity: no boolean/Boolean-argument constructor/factory method to deserialize from boolean value (true).

Это работает, если я изменяю тип возврата обеих функций в моей клиентской части с ResponseEntity<Boolean>до boolean. Должен ли я сохранить его таким образом или можно исправить исходный код без особых хлопот и сохранить ResponseEntity<Boolean> возвращаемых типов?

...