Как я могу отправить данные JSON со своей страницы JSP на контроллер пружины отдыха - PullRequest
0 голосов
/ 05 июня 2019

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

Я отправляю все это как jsonна мой контроллер пружины отдыха, но когда я открыл в режиме отладки, я обнаружил, что контроллер получил только две данные (один из флажок, который я нажал и введите входное значение).Я не понимаю, где все остальные данные были потеряны.

Кроме того, когда я отправляю данные через почтальона, все работает нормально, но я не знаю, почему у меня возникают проблемы при отправке со страницы jsp.

Также я первоначально использовал @RequestBody в контроллере для получения данных типа объекта класса pojo, но он выдавал ошибку неподдерживаемого типа содержимого, поэтому я заменил @RequestBody на @RequestParam и теперь использовал данные типа карты.Теперь эта ошибка не приходит, но я все еще не понимаю, почему она выдает ошибку.

jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
       pageEncoding="ISO-8859-1"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<!-- Static content -->
<script
       src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="/resources/css/style.css">
<script type="text/javascript" src="/resources/js/app.js"></script>
</head>
<body>
   <script
       src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

 <form   id = "schedulejob" action="scheduleJob" method="POST">
<label>
<input type="checkbox"  id = "corporateClientCare" name="corporateClientCare" value="corporateClientCare" class="input_checkbox"> CorporateClientCare 
</label>
<label>
<input type="checkbox" id = "dayforce" name="dayforce" value="dayforce" class="input_checkbox"> Dayforce  </label>
<label>
<input type="checkbox" id = "tss" name="tss" value="tss" class="input_checkbox"> TSS </label>
<label>
<input type="checkbox" id = "multimax"  name="multimax" value="multimax" class="input_checkbox"> Multimax</label>
<label> <input type="checkbox" id = "arcot"  name="arcot" value="arcot" class="input_checkbox"> Arcot <br/></label> 
<input type="datetime-local" id="dateTime" name = "dateTime" value="2019-06-04T15:25:33">    
<input type="submit" name="Scheduler" value="Scheduler" class="submit"/></form>

<script>
jQuery(document).ready(function($) {
$("#schedulejob").submit(function(){
var scheduleRequest = {};
scheduleRequest["corporateClientCare"] = verifychecked("corporateClientCare");
scheduleRequest["dayforce"] = verifychecked("dayforce");
scheduleRequest["tss"] = verifychecked("tss");
scheduleRequest["multimax"] = verifychecked("multimax");
scheduleRequest["arcot"] = verifychecked("arcot");
scheduleRequest["dateTime"] = document.getElementById("dateTime").value;
scheduleRequest["timeZone"] = "Asia/Kolkata";
$.ajax({

type : form.attr('method'),
contentType : "application/json;charset=utf-8",
url : form.attr('action'),
data : JSON.stringify(scheduleRequest),
dataType : 'json',              
success : function(data) {

                    }
                });
         });

        function verifychecked(value) {
        var varr = '';
        if(document.getElementById(value).checked)
        {
           varr = value;
        }
        else{
            varr = null;
        }
          return varr;

    }
    });
    </script>   
</body>
</html> 

controller

@Autowired
    private Scheduler scheduler;

@PostMapping("/scheduleJob")
public ResponseEntity<ScheduleResponse> scheduleJobs(@RequestBody ScheduleRequest  scheduleRequest) {
    try {
        System.out.println("___________IN CONTROLLER__________");
        System.out.println("--------------zone-----------");
        ZonedDateTime dateTime = ZonedDateTime.of(scheduleRequest.getDateTime(), scheduleRequest.getTimeZone());
        System.out.println("--------------date is-----------" + dateTime);
        System.out.println("dateTime is " + dateTime);
        if(dateTime.isBefore(ZonedDateTime.now())) {
            ScheduleResponse scheduleResponse = new ScheduleResponse(false,
                    "dateTime must be after current time");
            System.out.println("--------------1-------------------");
            return ResponseEntity.badRequest().body(scheduleResponse);
        }
//rest code

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

1 Ответ

0 голосов
/ 06 июня 2019

В вашем случае, так как вы предоставили параметр action и method в форме, а также поскольку у вас есть кнопка отправки в форме, при нажатии кнопки submit запускается запрос POST, и тип содержимого для этого запроса будетapplication/x-www-form-urlencoded по умолчанию.Итак, если вы хотите, чтобы это было изменено на json, вы должны использовать enctype атрибут вроде:

<form method="post" enctype="multipart/form-data">

Но, к сожалению, для вас HTML не предоставляет возможности для генерации JSON из данных формы .Если вы действительно хотите обработать его с клиента, вам придется прибегнуть к использованию JavaScript

. Поэтому вы должны сначала отключить отправку html-формы , а затем собрать данные и использовать jquery ajax.сделать запрос на публикацию с типом содержимого, установленным как application/json.

Попробуйте запустить jquery для отправки формы jquery:

$("#schedulejob").on('submit',function( event ) { 

event.preventDefault();

var scheduleRequest = {};
scheduleRequest["corporateClientCare"] = verifychecked("corporateClientCare");
scheduleRequest["dayforce"] = verifychecked("dayforce");
scheduleRequest["tss"] = verifychecked("tss");
scheduleRequest["multimax"] = verifychecked("multimax");
scheduleRequest["arcot"] = verifychecked("arcot");
scheduleRequest["dateTime"] = document.getElementById("dateTime").value;
scheduleRequest["timeZone"] = "Asia/Kolkata";

$.ajax({

type : form.attr('method'),
contentType : "application/json;charset=utf-8",
url : form.attr('action'),
data : JSON.stringify(scheduleRequest),
dataType : 'json',              
success : function(data) {

                    }
                });
         });

        function verifychecked(value) {
        var varr = '';
        if(document.getElementById(value).checked)
        {
           varr = value;
        }
        else{
            varr = null;
        }
          return varr;

  }); 
});

В вашем коде вы не передавали 'событие 'к функции. В соответствии с документацией jquery вы должны сделать следующее: См. ссылка

или вместо использования кнопки ввода типа ввода используйте следующее:

<button type="button" id="submitBtn">Submit Form</button>

$(document).ready(function(){
$("#submitBtn").click(function(){        
   // Submit the form using jquery like above
});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...