2015-04-28 112 views
1

我正在简单建立必须具有数据和徽标的注册。在测试中可以传输文件,并分别数据,但尝试将它们一起发送下面的错误时,会发生:SyntaxError:意外的令牌S,AngularJS,Spring

SyntaxError: Unexpected token S 
at Object.parse (native) 
at qc (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:14:245) 
at Zb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:76:423) 
at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:77:283 
at r (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:7:302) 
at Zc (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:77:265) 
at c (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:78:414) 
at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:112:113 
at n.$get.n.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:126:15) 
at n.$get.n.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:123:106) 

的角度控制器

angular.module('EntregaJaApp').controller('EstabelecimentoController', ['$scope', '$http','Upload', function($scope, $http,Upload){ 

$scope.salvar = function(){ 
     Upload.upload({ 
      url: 'http://localhost:8080/site-web/gerencial/estabelecimento/salvar', 
      file: $scope.picFile[0], 
      method: 'POST', 
      headers: {'Content-Type': 'multipart/form-data'}, // only for html5 
      data: {'estabelecimento': $scope.estabelecimento} 
     }); 
}} 

春季控制器

@Controller 
@RequestMapping("/gerencial/estabelecimento") 
public class EstabelecimentoController { 

@Autowired 
private EstabelecimentoService estabelecimentoService; 

    @RequestMapping(value = "/salvar", method = RequestMethod.POST) 
public ResponseEntity<?> salvar(Estabelecimento estabelecimento,@RequestParam(value="file", required=false) MultipartFile file){ 
    try { 
      byte[] bytes; 

      if (!file.isEmpty()) { 
       bytes = file.getBytes(); 
       //store file in storage 
      } 

      System.out.println(String.format("receive %s from %s", file.getOriginalFilename(), estabelecimento.getNome())); 
     estabelecimentoService.salvar(estabelecimento); 
     return new ResponseEntity<>(MensagensGerais.SUCESSO_SALVAR,HttpStatus.OK); 
    } catch (Exception e) { 
     return new ResponseEntity<>((StringUtil.eVazia(e.getMessage()) ? MensagensGerais.ERRO_CONSULTAR : e.getMessage()),HttpStatus.BAD_REQUEST); 
    } 
} 
    } 
+0

由于错误是在解析我猜数据发送到Angular是无效的或它期望的。你是否能够展示你正在传输的内容? –

+0

我试图传输{“nome”:“测试”},也尝试过JSON.parse()和angular.toJson(),但是有同样的错误。 –

+0

检查您的JSON数据是否有效... – arman1991

回答

0

做你错过了返回类型注释?像

@RequestMapping(value = "/salvar", method = RequestMethod.POST) 
@Produces(MediaType.APPLICATION_JSON) 
public ResponseEntity<?> salvar(Estabelecimento estabelecimento,@RequestParam(value="file", required=false) MultipartFile file){...} 
+0

它没有工作 –

+0

您可以使用fiddler o wireshark查看服务器响应吗? – Slumber86

+0

响应头 观点解析 HTTP/1.1 200 OK 服务器:Apache-狼/ 1.1 内容类型:应用程序/ JSON 的Content-Length:17 –

0

假设请求指定一个Accept Header“application/json”,它似乎是字符串没有正确序列化(由春?)。 1.3.x之前的角度版本似乎很慷慨,但现在当响应不正确时,引发异常JSON。我已经添加了以下回应transformer到我的应用程序:

$httpProvider.defaults.transformResponse.unshift(function(data, headersGetter, status){ 
      var contentType = headersGetter('Content-Type'); 
      if(angular.isString(contentType) && contentType.startsWith('application/json')){ 
       try { 
        angular.fromJson(data); 
       } catch(e){ 
        var mod = '"'+data+'"'; 
        try { 
         angular.fromJson(mod); 
         return mod; 
        } 
        catch(e){ 
         return data; 
        } 
       } 
       return data; 
      } 
      else{ 
       return data; 
      } 
     }); 

它通过附加"包裹它把一个JS字符串JSON字符串对象。