2016-11-14 103 views
2

我想从我的控制器string response但我得到下面的错误:爪哇 - 字符串@ResponseBody - 错误200

SyntaxError: Unexpected end of JSON input(…) "Error 200"

当我变成一个布尔值或不同类型的反应,这是工作正常。问题是当我尝试返回一个字符串。

JS代码:

$.ajax({ 
    method: "POST", 
    url: "./signup", 
    data: _data, 
    dataType: "json", 
    contentType : "application/json;charset=UTF-8", 
    success : function(data) { 
     console.log(data) 
    }, 
    error : function(qXHR, textStatus, errorThrown){ 
     console.log(errorThrown, "Error " + qXHR.status); 
    } 
    }); 

控制器代码:

@RequestMapping(value = "/signup", method = RequestMethod.POST, produces = {"text/plain", "application/*"}) 
    public @ResponseBody String signup(@RequestBody UserSignup details) { 
     //... 
     return message; 
    } 

任何想法我怎么能解决这个问题?我已经尝试了一些东西,但没有任何工作。我认为响应格式是错误的,因为代码的期望。

编辑

我已经改变了我的代码(删除produces),但我仍然得到同样的错误:

SyntaxError: Unexpected end of JSON input(…) "Error 200"

@RequestMapping(value = "/signup", method = RequestMethod.POST) 
    public @ResponseBody String signup(@RequestBody UserSignup details) { 
     message = "ok"; 
     } 
     return message; 
    } 

回答

0

由于我没有问题,当回应是不同的东西作为String我已经解决了创建我自己的对象的问题。所以,下面是代码:

public class Response<T> { 
    private T message; 
    private Exception ex; 

    public Exception getEx() { 
     return ex; 
    } 

    public void setEx(Exception ex) { 
     this.ex = ex; 
    } 

    public T getMessage() { 
     return message; 
    } 

    public void setMessage(T message) { 
     this.message = message; 
    } 
} 


@Controller 
public class MyControllerController { 
    private Response<String> _response; 
    private String message; 

    public MyController() { _response = new Response<>(); } 

@RequestMapping(value = "/signup", method = RequestMethod.POST) 
    public @ResponseBody Response<String> signup(@RequestBody UserSignup details) { 
     try{ 
      message = ""; 
      // code... 
      _response.setMessage(message); 
      return _response; 
     }catch (Exception ex){ 
      _response.setEx(ex); 
      return _response; 
     } 
    } 
} 

响应例如在浏览器中:

Object {message: "", ex: null}

5

你的方法是错误的。您正在说生产产生= {“text/plain”,“application/*”}但是您还添加了将生成JSON格式响应的@ResponseBody。

我建议你删除属性生成。并确认你正在返回的字符串以及形成

+0

我曾试图消除''produces'',我试图返回一个字符串,如“OK”和我仍然得到相同的错误。 @cralfaro – gon250

+0

@ gon250你能否用你正在测试的数据更新你的问题?和错误消息?只是为了与您同时更新 – cralfaro

+0

我已经添加了新的代码。基本上我已经删除了产品,并确保我返回一个字符串。 – gon250

0

尝试包在ResponseEntity类的响应

@RequestMapping(value = "/signup", method = RequestMethod.POST) 
    public @ResponseBody ResponseEntity<String> signup(@RequestBody UserSignup details) { 
     message = "ok"; 
     return new ResponseEntity<>(message, HttpStatus.OK); 
    } 

而且您要发送到服务器仔细检查数据,也许这就是问题,你能不能告诉我们_data值?