У меня есть клиент JavaFX, который использует службу отдыха, реализованную в Spring Boot v2.0.0, при разработке я создал контроллер, в котором у него есть список POJO в качестве параметра запроса в запросе Post, поэтому я могу добавить набор объекты объекта в один вызов
Вот что я сделал до сих пор
Мой контроллер:
@PostMapping
private ServerResponse creatAllCompDatas(
@RequestParam final List<ComponentDataForm> componentDataFormValues
) {
if (isSessionValid()) {
List<Long> datasIds = new ArrayList();
componentDataFormValues.stream().forEach(formValue -> {
MNG_COMPOSANT_DATA mng_composant_data = new MNG_COMPOSANT_DATA();
mng_composant_data.setCmp_attr_code(formValue.getAttCode());
mng_composant_data.setCmp_attr_label(formValue.getAttTitle());
mng_composant_data.setCmp_attr_value(formValue.getAttVal());
datasIds.add(mng_composant_data.getId());
});
initSuccessResponse(datasIds);
return serverResponse;
}
initFailLoginResponse();
return serverResponse;
}
Мой ComponentDataForm POJO (в данном случае DTO)
@Component
public class ComponentDataForm {
@JsonProperty("attCode")
private String attCode;
@JsonProperty("attTitle")
private String attTitle;
@JsonProperty("attVal")
private String attVal;
public ComponentDataForm() {
}
public String getAttCode() {
return attCode;
}
public void setAttCode(String attCode) {
this.attCode = attCode;
}
public String getAttTitle() {
return attTitle;
}
public void setAttTitle(String attTitle) {
this.attTitle = attTitle;
}
public String getAttVal() {
return attVal;
}
public void setAttVal(String attVal) {
this.attVal = attVal;
}
@Override
public int hashCode() {
int hash = 7;
hash = 29 * hash + Objects.hashCode(this.attCode);
hash = 29 * hash + Objects.hashCode(this.attTitle);
hash = 29 * hash + Objects.hashCode(this.attVal);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final ComponentDataForm other = (ComponentDataForm) obj;
if (!Objects.equals(this.attCode, other.attCode)) {
return false;
}
if (!Objects.equals(this.attTitle, other.attTitle)) {
return false;
}
if (!Objects.equals(this.attVal, other.attVal)) {
return false;
}
return true;
}
@Override
public String toString() {
return "ComponentDataForm{" + "attCode=" + attCode + ", attTitle=" + attTitle + ", attVal=" + attVal + '}';
}
public ComponentDataForm(String attCode, String attTitle, String attVal) {
this.attCode = attCode;
this.attTitle = attTitle;
this.attVal = attVal;
}
}
Этим я возобновил свой бэкэнд
Теперь я предоставлю вам мой интерфейс Javafx:
@FXML
private void doCommit(ActionEvent event) throws UnirestException{
if(validate()){
final ObservableList<AppDataAttTDO> items = tableAtributes.getItems();
final List<ComponentDataForm> componentDataFormValues = new ArrayList();
items.stream().forEach(item -> {
final ComponentDataForm requestItem = new ComponentDataForm();
requestItem.setAttCode(item.getAttCode());
requestItem.setAttTitle(item.getAttTitle());
requestItem.setAttVal(item.getAttValue());
componentDataFormValues.add(requestItem);
});
HttpResponse<String> asString = Unirest.post(APPLICATION_DATA_SERVICE_URL)
.queryString("componentDataFormValues", componentDataFormValues)
.asString();
System.out.println(asString.getStatus());
System.out.println(asString.getBody());
}
}
Когда я отправляю запрос от моего клиента на мой сервер, сервер выдает следующее исключение
2018-05-17 14: 47: 24.970 WARN 3660 --- [nio-8443-exec-7] .wsmsDefaultHandlerExceptionResolver: Не удалось преобразовать элемент запроса: org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: преобразовать значение типа «java.lang.String []» в требуемый тип «java.util.List»; вложенным исключением является java.lang.IllegalStateException: невозможно преобразовать значение типа «java.lang.String» в требуемый тип «com.easyData.pos.easyPos.rest.contoller.application.ComponentDataForm»: не найдено соответствующих редакторов или стратегии преобразования
2018-05-17 14: 47: 24.970 WARN 3660 --- [nio-8443-exec-7] .wsmsDefaultHandlerExceptionResolver: Устраненное исключение, вызванное выполнением обработчика: org.springframework.web.method.annotation.MethodArgumentConversionNotSupported Не удалось преобразовать значение типа «java.lang.String []» в требуемый тип «java.util.List»; вложенным исключением является java.lang.IllegalStateException: невозможно преобразовать значение типа «java.lang.String» в требуемый тип «com.easyData.pos.easyPos.rest.contoller.application.ComponentDataForm»: не найдено соответствующих редакторов или стратегии преобразования
После 1 дня исследования я понимаю, что мне нужно создать конвертер, который будет анализировать полученный параметр запроса для моего POJO, расширяя интерфейс org.springframework.core.convert.converter.Converter;
для создания конвертера String, ComponentDataForm
Но вот я застрял, я не знаю, как написать этот конвертер.