使用Angularjs发送POST时收到400错误请求(datepicker组件)

时间:2016-01-07 13:25:20

标签: java jquery angularjs bootstrap-datepicker

我的网络应用程序基本上是:jsp + angularjs,但由于我正在使用的模板,这个日期选择器与jQuery一起运行。

在解释发生了什么之前,我的DTO的属性与我的实体属性相匹配,都是java.util.Date,我只是告诉我已经验证了属性类型,因为我有很多400个错误的请求。

enter image description here

我有一个模态,我有很多字段,但我最近插入了两个datepickers(bootstrap),直到那时应用程序崩溃,当我通过ajax将POST发送到我的java控制器时,我收到一个错误的请求(400) ,我认为这是因为格式错误(mm / dd / yyyy)。我正确地将日期格式化为巴西的pt_BR,但它无效。

BoxApp.controller("UsuariosController", function($scope, $http) {	
	
	$scope.usuarios={};
	$scope.usuariosParaAlterar={};
	
	$scope.iniciar = function() {
		$http.get('/boxmlV2/usuario').success(function (response) {
			$scope.usuarios = response;
		});
	};
	$scope.iniciar();
	
	$scope.setSelected = function(selecao){
		$scope.usuariosParaAlterar = selecao;
	};
	
	/**
	 * Trecho para validar o form ao submeter.
	 */
	$scope.submitted = false;
	$scope.submitForm = function(formUsuarios) {
	    $scope.submitted = true;	    

		if (formUsuarios.$valid) {
			$("#dataValidadeConta").datepicker({
			    format: 'dd/mm/yyyy',                
			    language: 'pt-BR'
			});
            $("#dataValidadeSenha").datepicker({
                format: 'dd/mm/yyyy',                
                language: 'pt-BR'
            });			    
			
			$scope.editaUsuario();
		}
	};
	
	$scope.editaUsuario = function() {		

		$http.post('/boxmlV2/usuario/salvarUsuario', {
			ativo : $scope.usuariosParaAlterar.ativo, 
			idUsuario : idUsuario.value,
			nome : nome.value,
			senha : senha.value,
			email : email.value,
			bloqueado : $scope.usuariosParaAlterar.bloqueado,
			dataValidadeConta : $scope.usuariosParaAlterar.dataValidadeConta,
			dataValidadeSenha : $scope.usuariosParaAlterar.dataValidadeSenha, 
			resetSenha : $scope.usuariosParaAlterar.resetSenha,
			perfil : $scope.usuariosParaAlterar.perfil			
		}).then(function(response) {
			$scope.sucesso();
		}, function(response) {
			// called asynchronously if an error occurs
			// or server returns response with an error status.
		});

	};

	$scope.sucesso = function() {
		$scope.closeMyPopup();
		$scope.iniciar();		
	};

	$scope.closeMyPopup = function() {
		$(myModal_autocomplete).modal('hide');
	};
	
	$scope.preparaInsercao = function() {		
		nome.value = "";
		senha.value = "";
		email.value = "";		
		$(idUsuario).val("");
		$(idUsuario).hide();
		$(idLabel).hide();
	};	
	
});
<!-- START MODAL -->
					<div id="myModal_autocomplete" class="modal fade" role="dialog"
						aria-hidden="true" style="display: none;">
						<div class="modal-dialog">
							<div class="modal-content">
								<div class="modal-header">
									<button type="button" class="close" data-dismiss="modal"
										aria-hidden="true"></button>
									<h4 class="modal-title">Cadastro de Usuário</h4>
								</div>
								<div class="modal-body form">
									<form name="form" id="form_sample_2" role="form"
										class="form-horizontal ng-pristine ng-valid" novalidate>

										<div class="form-body">
											<div class="form-group">
												<label class="control-label col-md-3">Ativo:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<div class="clearfix">
														<div>
															<label class="btn btn-default active"> <input
																type="radio" name="ativo"
																ng-model="usuariosParaAlterar.ativo" value="true">
																Sim <br />
															</label> <label class="btn btn-default"> <input
																type="radio" name="ativo"
																ng-model="usuariosParaAlterar.ativo" value="false">
																Não <br />
															</label>
														</div>
													</div>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Nome:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input type="text" ng-model="usuariosParaAlterar.nome"
														class="form-control" id="nome" maxlength="100" name="nome"
														required> <span style="color: red"
														ng-show="submitted && form.nome.$error.required">Campo
														Nome Obrigatório.</span>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Senha:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input type="password" ng-model="usuariosParaAlterar.senha"
														class="form-control" maxlength="100" name="senha"
														placeholder="Do E-mail De Recebimento do XML" id="senha"
														required> <span style="color: red"
														ng-show="submitted && form.senha.$error.required">Campo
														Senha Obrigatório.</span>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">E-mail:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input type="email" ng-model="usuariosParaAlterar.email"
														class="form-control" id="email" maxlength="100"
														name="email" required> <span style="color: red"
														ng-show="submitted && form.email.$error.required">Campo
														E-mail Obrigatório.</span>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Bloqueado:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<div class="clearfix">
														<div>
															<label class="btn btn-default active"> <input
																type="radio" name="bloqueado"
																ng-model="usuariosParaAlterar.bloqueado" value="true">
																Sim <br />
															</label> <label class="btn btn-default"> <input
																type="radio" name="bloqueado"
																ng-model="usuariosParaAlterar.bloqueado" value="false">
																Não <br />
															</label>
														</div>
													</div>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Data Validade Conta:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input
														class="form-control form-control-inline input-medium date-picker"
														name="dataValidadeConta" id="dataValidadeConta" 
														ng-model="usuariosParaAlterar.dataValidadeConta"
														size="16" type="text" value="" required/> <span
														class="help-block"> Selecione a data </span>
														<span style="color: red"
														ng-show="submitted && form.dataValidadeConta.$error.required">Campo
														Data Validade Conta Obrigatório.</span>												
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Data Validade Senha:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input
														class="form-control form-control-inline input-medium date-picker"
														ng-model="usuariosParaAlterar.dataValidadeSenha"
														name="dataValidadeSenha" id="dataValidadeSenha" 
														size="16" type="text" value="" required/> <span
														class="help-block"> Selecione a data </span>
														<span style="color: red"
														ng-show="submitted && form.dataValidadeSenha.$error.required">Campo
														Data Validade Senha Obrigatório.</span>												
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Resetar Senha:<span
													class="required" aria-required="true"> * </span>
												</label>
												<div class="col-md-9">
													<div class="clearfix">
														<div>
															<label class="btn btn-default active"> <input
																type="radio" name="resetSenha"
																ng-model="usuariosParaAlterar.resetSenha" value="true">
																Sim <br />
															</label> <label class="btn btn-default"> <input
																type="radio" name="resetSenha"
																ng-model="usuariosParaAlterar.resetSenha" value="false">
																Não <br />
															</label>
														</div>
													</div>
												</div>
											</div>

											<div class="form-group">
												<label class="control-label col-md-3">Perfil
													Usuário:<span class="required" aria-required="true">
														* </span>
												</label>
												<div class="col-md-9">
													<div class="clearfix">
														<div>
															<label class="btn btn-default active"> <input
																type="radio" name="perfil"
																ng-model="usuariosParaAlterar.perfil" value="true">
																Admin <br />
															</label> <label class="btn btn-default"> <input
																type="radio" name="perfil"
																ng-model="usuariosParaAlterar.perfil" value="false">
																Usuário <br />
															</label>
														</div>
													</div>
												</div>
											</div>

											<div class="form-group">
												<label id="idLabel" class="control-label col-md-3">ID:<span
													class="required" aria-required="true"> * </span></label>
												<div class="col-md-9">
													<input type="text" ng-model="usuariosParaAlterar.idUsuario"
														class="form-control" id="idUsuario" maxlength="100"
														name="idUsuario" required disabled> <span
														style="color: red"
														ng-show="submitted && form.idUsuario.$error.required">Campo
														ID Obrigatório.</span>
												</div>
											</div>
										</div>
									</form>
								</div>
								<div class="modal-footer">
									<button type="button" class="btn btn-default"
										data-dismiss="modal">Cancelar</button>
									<button type="submit" class="btn btn-primary"
										ng-click="submitForm(form)">
										<i class="fa fa-check"></i> Salvar
									</button>
								</div>
							</div>
						</div>
					</div>
					<!-- END MODAL -->

控制器:

package br.com.kolss.boxml.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import br.com.kolss.boxml.dto.RetornoDTO;
import br.com.kolss.boxml.dto.UsuarioDTO;
import br.com.kolss.boxml.enums.RetornoEnum;
import br.com.kolss.boxml.service.UsuarioService;

@Controller
public class CadastroUsuariosController {

@Autowired
private UsuarioService usuarioService;

@RequestMapping(value="/usuario", method=RequestMethod.GET)
public ModelAndView iniciar(ModelMap modelMap){
    return new ModelAndView("usuario");
}

@RequestMapping(value="/usuario",method=RequestMethod.GET,produces={"application/json"})
public @ResponseBody List<UsuarioDTO> obterTodos(ModelMap modelMap){
    return usuarioService.obterTodos();
}

@RequestMapping(value = "/usuario/salvarUsuario", method = RequestMethod.POST, produces = { "application/json" })
public @ResponseBody RetornoDTO insereOuEditaUsuario(
        @RequestBody UsuarioDTO usuarioDTO) {

    usuarioService.insereOuEditaUsuario(usuarioDTO);
    return new RetornoDTO(RetornoEnum.SUCESSO);

}

}

1 个答案:

答案 0 :(得分:1)

pt_BR的日期格式仅适用于在datepicker控件中显示的方式。请注意,您要将一个字符串mm/dd/yyyy发送回服务器,您需要确保它在控制器中被解析。