当我使用AJAX调用提交JSON

时间:2018-03-02 14:39:02

标签: jquery ajax spring forms rest

好的伙计我有这个问题,如果我直接使用表单提交它工作正常但最近我不得不对webapp进行一些升级,现在我真的卡住了因为我在标题中解释的内容。 / p>

我有这个jquery函数

<script type="text/javascript">
        $(document).ready(function() {
            var contextroot = "/Progetto/"
            $(".dati").on('submit', function(e) {
                var form = $(".dati");
                var action = form.attr("action");
                if (action == "restAddStudent") {
                    e.preventDefault();
                    var data = form.serializeArray();
                    $.ajax({
                        url : contextroot + action,
                        dataType : 'json',
                        type : 'POST',
                        contentType : 'application/json',
                        data : JSON.stringify(getFormData(data)),
                        error : function(jqXhr, textStatus, errorThrown) {
                            console.log(errorThrown);
                        }
                    });
                }
            });
        });
        function getFormData(data) {
            var unindexed_array = data;
            var indexed_array = {};
            $.map(unindexed_array, function(n, i) {
                indexed_array[n['name']] = n['value'];
            });
            return indexed_array;
        }
    </script>

将我的数据提交给RestController,直到这一点它工作正常。 当我的restController应该给我json回来时,问题出现了,实际上页面没有返回任何json文件。

@RequestMapping(value = "/restAddStudent", produces = "application/json")
    private Confirmation addStudent(@RequestBody AddStudent addStud) {
        Confirmation result = new Confirmation();
        try {
            String nome = addStud.getNome();
            String cognome = addStud.getCognome();
            long classe = addStud.getClasse();
            Long c = classe;
            logger.debug(
                    String.format("Inizio operazione aggiunta studente [Nome: %s], [Cognome : %s], [ID classe : %d]",
                            nome, cognome, classe));
            StudListDTO studListDTO = new StudListDTO();
            ClassiDTO classDTO = new ClassiDTO();
            classDTO.setID(classe);
            studListDTO.setCognome(cognome);
            studListDTO.setNomeS(nome);
            studListDTO.setClasse(classDTO);
            if (nome != null && cognome != null && c != null) {
                ss.aggiungiStud(studListDTO);
            } else {
                result.setMessage("Non è stato possibile inserire l'utente in quanto sono stati lasciati dei campi in bianco");
                result.setStatus("WARN");
                logger.error("I campi nome o cognome sono vuoti! Impossibile aggiungere lo studente");
            }
        } catch (Exception e) {
            logger.error("Non è stato possibile inserire lo studente", e);
            result.setMessage("Non è stato possibile inserire lo studente");
            result.setStatus("WARN");
        } finally {
            logger.debug("Fine operazione aggiunta studente");
        }

        return result;
    }

此方法应该返回这样的内容:return sample 但是,它现在没有向我显示任何内容。

1 个答案:

答案 0 :(得分:0)

您的控制器方法看起来很奇怪..

您正在返回确认,但似乎只有在出现问题时才会设置。你确定要归还正确的物体吗?

此外,您的控制器应该是公开的而不是私人的。

并删除产生=&#34; application / json&#34;并使用MediaType.Application.JSON代替