Как мне решить проблему связывания в Spring контроллера - PullRequest
0 голосов
/ 30 января 2019

когда я использую общий параметр для выполнения некоторой общей логики с помощью пружины.Я обнаружил, что не могу использовать enum для ввода.как почтальон или другой.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Чтобы решить эту проблему, я пробую много способов.наконец, слава богу. Успехов.

Это только для RequestMethod.POST. И ваш параметр должен быть объектом (может быть, RequestMethod.GET или один параметр также доступен. Но я не нашел, как это сделать)

пример

@Data
@Builder
@AllArgsConstructor
@RequiredArgsConstructor
public class CommonParam implements Serializable {

    /**
     *

     */
    @Size(min = 1, max = CommonConstants.MAX_PARTITION_SIZE)
    private List<String> texts;

    /**
     * 
     */
    @NotNull
    private KeyTypeEnum keyTypeEnum;
}

@PostMapping("/do")
public RpcResult do(@RequestBody @Valid CommonParam commonParam) {
   .....
}

последний, но не менее важный

public enum KeyTypeEnum {

    /**
     * 手机号
     */
    PHONE(1, "phone");

    private int value;
    private String desc;

    KeyTypeEnum(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    public static KeyTypeEnum getByDesc(String desc) {
        for (KeyTypeEnum b : KeyTypeEnum.values()) {
            if (b.getDesc()
                .equals(desc)) {
                return b;
            }
        }
        return null;
    }

    @JsonCreator
    public static KeyTypeEnum getByValue(int value) {
        for (KeyTypeEnum b : KeyTypeEnum.values()) {
            if (Objects.equals(b.getValue(), value)) {
                return b;
            }
        }
        return null;
    }

    @JsonValue
    public int getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }

}

Используя @JsonCreator, мы можем обеспечить ввод как '1' (этоcode - это уже определенное значение KeyTypeEnum), которое можно успешно преобразовать в enum.@JsonValue убедитесь, что '1' может быть успешным для весны.

enter image description here

0 голосов
/ 30 января 2019

Значение KeyTypeEnum должно быть PHONE в полезной нагрузке JSON.Невозможно однозначно разрешить по значению 1, как вы ожидаете.Вы можете иметь несколько перечислений с одним и тем же значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...