Карта Java DTO в ответ - PullRequest
       76

Карта Java DTO в ответ

0 голосов
/ 20 декабря 2018

У меня есть карта Java, которую я хотел бы отобразить, используя DTO в ответ.Я пробовал это:

Служба:

@Service
public class GatewaysService {

    public Map<Integer, String> getGatewaysList() {    
        Map<Integer, String> list = new HashMap<>();    
        list.put(1, "Bogus");    
        return list;
    }
}

API:

@Autowired
private GatewaysService gatewaysService;

    @GetMapping("gateways")
        public ResponseEntity<?> getGateways() {
            return ok(gatewaysService.getGatewaysList().map(mapper::toGatewayMap));
        }

DTO:

public class ContractGatewaysDTO {

    private Integer id;

    private String gateway;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getGateway() {
        return gateway;
    }

    public void setGateway(String gateway) {
        this.gateway = gateway;
    }
}

Mapper:

Map<Integer, String> toGatewayMap(ContractGatewaysDTO dto);

Но я получаю ошибку:

The method map(ContractDTO) in the type ContractsMapper is not applicable for the arguments (mapper::toGatewayMap)

Как правильно ее отобразить?Я хочу преобразовать карту Java в ответ ключ-значение.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я думал о том, что вы можете преобразовать Карту в объект DTO, если это то, что вам нужно, вы можете достичь, выполнив следующее:

return ResponseEntity.ok(getGatewaysList()
                                    .entrySet()
                                    .stream()
                                    .map( g -> new ContractGatewaysDTO(g.getKey(), g.getValue()))
                                    .collect(Collectors.toList()));
0 голосов
/ 20 декабря 2018

Почему бы не просто

@Autowired
private GatewaysService gatewaysService;

    @GetMapping("gateways")
        public Map<String,String> getGateways() {
            return gatewaysService.getGatewaysList();
        }

Вам не нужно ничего здесь сопоставлять.

Более того

Если в Java 9+ что-то не изменилось, я не помню java.uti.Map чтобы иметь map метод, который вы используете здесь

gatewaysService.getGatewaysList().map(mapper::toGatewayMap)

То, что я предположил , что вы пытались сделать, выглядит примерно так:

List<Dto> yourlist= gatewaysService.getGatewaysList() //why MAP is named a LIST idk;
                        .entrySet() //can be any streamable collection - this comes with maps;
                        .stream()
                        .map(entry->new Dto(entry.key(),entry.value())
                        .collect(Collectors.toList());
...