#jquery #ajax #spring #spring-mvc #thymeleaf
#jquery #ajax #spring #spring-mvc #thymeleaf
Вопрос:
Итак, я получаю очень странную проблему. При отправке запроса post с использованием ajax
на мой Spring Controller, даже если я ничего не возвращаю, я получаю следующую ошибку.
Шаблон для устранения ошибок «poliza / modificar-distribucion», шаблон может не существовать или может быть недоступен ни для одного из настроенных преобразователей шаблонов
Вот код моего контроллера.
@Controller
@RequestMapping("/poliza")
public class EntryController {
// Some other methods and the @Autowired services.
@PostMapping(value = "/modificar-distribucion")
public void updateEntryDistribution(@RequestBody EntryDistribution entryDistribution) throws Exception {
entryDistributionService.updateDistribution(entryDistribution);
}
}
Это мой код jQuery.
// Return the distribution object for each cell.
function getDistributionObject(cell) {
// Some logic.
// Return the object.
return {
entryDistributionID: {
entryID: id,
productCode: productCode,
sizeFK: size,
sizeType: sizeType,
storeId: storeId
},
quantity: integerValue,
entryHeader: null
}
}
function sendRequest(distributionObject, cell) {
// Some logic.
$.ajax({
url: "/poliza/modificar-distribucion",
data: JSON.stringify(distributionObject),
contentType : 'application/json; charset=utf-8',
dataType: 'json',
type: "POST",
success: function() {
// Now, let's set the default value to the actual value.
$(cell).attr('default-value', quantity);
}, error: function(error) {
// Send a notification indicating that something went wrong.
// Only if it is not an abort.
if(error.statusText === "Abort") return;
errorNotification(error.responseJSON.message);
}
}));
}
Мой сервисный код.
@Override
public void updateDistribution(EntryDistribution entryDistribution) throws Exception {
// First, let's see if the distribution exists.
EntryDistribution oldEntryDistribution = this.findById(entryDistribution.getEntryDistributionID());
if(oldEntryDistribution == null) {
// If not, insert it.
this.insert(entryDistribution);
} else {
// Else, update it.
this.update(entryDistribution);
}
}
Объект распределения записи.
public class EntryDistribution {
private EntryDistributionID entryDistributionID;
private Integer quantity;
private EntryHeader entryHeader;
// Getters and setters.
}
public class EntryDistributionID implements Serializable {
private Long entryID;
private String productCode;
private String sizeFK;
private String sizeType;
private String storeId;
// Getters and setters.
}
Есть идеи, почему это происходит? Я не должен получать эту ошибку, поскольку я не пытаюсь извлечь какой-либо шаблон Thymeleaf в этом конкретном вызове.
Комментарии:
1. можете ли вы опубликовать свой класс контроллера, а также distributionObject в jquery
2. @NegiRox Я только что отредактировал свой вопрос, добавив необходимую информацию.
Ответ №1:
Ваш метод должен возвращать что-то вместо void, чтобы ajax мог знать, был ли вызов успешным или нет (измените тип возвращаемого метода с void на boolean или string).
Поскольку вы не указали тип содержимого ответа, spring пытается найти HTML-страницу.
Чтобы разрешить это, скажите spring, чтобы вернуть ответ JSON, добавив аннотацию @ResponseBody поверх метода, как показано ниже.
@PostMapping(value = "/modificar-distribucion")
@ResponseBody
public String updateEntryDistribution(@RequestBody EntryDistribution entryDistribution) throws Exception {
entryDistributionService.updateDistribution(entryDistribution);
return "success";
}
Ответ №2:
можете ли вы заменить свой код этим и попробовать.
@PostMapping(value = "/modificar-distribucion")
public void updateEntryDistribution(@RequestBody EntryDistribution entryDistribution) throws Exception {
entryDistributionService.updateDistribution(entryDistribution);
}
@ResponseBody
@RequestMapping(value = "/modificar-distribucion", method = RequestMethod.POST)
public Boolean updateEntryDistribution(@RequestBody EntryDistribution entryDistribution) {
return true;
}
также проверьте, что объект JSON, который вы передаете, должен совпадать с атрибутами POJO