Шаблон для устранения ошибок, когда я даже не прошу об одном

#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