我使用angularjs $ http服务发布到Spring REST端点。这是非常直接的,它按预期工作,但终点是返回状态代码500内部错误。但在服务器端,它不会显示任何错误和异常。我发送邮件请求如下
$http.post('../bookmarks/add',data,{
cache:false,
headers:{'Content-Type':'application/x-www-form-urlencoded'},
transformRequest:function(data){
if(data===undefined)
return data;
return $.param(data);
},
responseType:'json'
}).success(function(data,status,headers,config){
$('.add-form').hide();
console.log(data);
callback(data,'success');
}).error(function(data,status,headers,config){
console.log(status);
if(status==500)
callback('Server error! Try again later.','error');
});
我可以发送帖子请求。我的REST处理程序如下。它调用服务来持久化对象。
@RequestMapping(value="/add", method=RequestMethod.POST, consumes={"application/x-www-form-urlencoded","application/json", "text/plain", "*/*"})
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Bookmark saveBookmarks(@RequestParam("caption") String caption,@RequestParam("bookmarkUrl") String bookmarkUrl,
@RequestParam(value="tags",required=false) String tags,@RequestParam(value="category", required=false) String category){
System.out.println(caption+"-"+tags+"-"+category);
//calling service and persisting the object
Bookmark bookmark= bookmakService.saveBookmark(
binder.getNewBookmark(caption,bookmarkUrl, dateGen.getToday(), category, tags)
,getUserIDFromSession());
System.out.println(bookmark);
return bookmark;
}
上面的处理程序按预期工作。该对象是持久的。但浏览器控制台显示500内部服务器错误,服务器不记录任何错误和异常。一切都很直接。我不知道客户端为什么会收到500错误。我正在使用Apache Tomcat 7。
答案 0 :(得分:0)
你可以告诉杰克逊用@JsonIgnore忽略一个属性。
@JsonIgnore
private User user;
这里有一个关于在序列化Json
时忽略属性的5种方法的教程http://www.baeldung.com/jackson-ignore-properties-on-serialization
答案 1 :(得分:0)
在pom中添加以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.1</version>
</dependency>
面临与返回类型相同的问题,无法与Class Bookmark的MediaType绑定。广告
答案 2 :(得分:0)
我遇到了类似的问题,但原因不同。如果可以从数据库中获取对象,但是json序列化失败,就会出现问题。
对我来说,这是由于私有 Double 类型的空值,但我的公共 getter 返回了 double 原始类型。当序列化器尝试序列化对象时,这可能返回一个空指针异常,但它没有记录在任何地方,也没有堆栈跟踪。