我有一个带有HTTPS的Spring Boot / Spring MVC网站。在我的页面上,我使用基本的AJAX调用来获取由@RestController提供的JSON数据,但它似乎被截断或者我完全不理解的东西。
当我自己调用REST端点时,我得到一个输出的全屏 - 它是我使用Jackson序列化的POJO列表。当我通过ajax调用它时,我会将其截断或其他内容。
当我将它发送到控制台以查看我得到的内容时:
console.log("now returning this:"); //shows 'now returning this'.
console.log(response); //returns Array [ Object, 13, 15, 19 ]
响应中的第一件事总是一个对象,但是如果有多于一个,那么我将得到一个似乎指向@JsonIdentityInfo生成的ID的数字列表。
所以pojo看起来有点像这样:
@JsonIdentity(generator = ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
@Entity
@Table (name = "tablename")
@JsonIgnoreProperties(ignoreUnknown = true) //because Jackson keeps throwing in new stuff
public class Table {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "columnname")
private Long id;
.....lots of properties and gets/sets
@ManyToOne
@JoinColumn(name = "col2", referencedColumnName = "col2", nullable = false, insertable = false, updatable = false)
@JsonBackReference(value = "blah")
@JsonIgnore
private OtherObject obj;
....more gets and sets. The OtherObject class has the ManagedReference....
}
在我的javascript中:
$.ajax({
url: "../mytesturl/" + ID,
dataType: "json",
contentType: "application/json",
timeout: 1000000
}).done(function (response) {
console.log("now returning this:"); //shows 'now returning this'.
console.log(response); //returns Array [ Object, 13, 15, 19 ]
});
我的RestController非常基本(只是很多行):
@RestController
public class RestController {
@RequestMapping(path = "mytesturl/{id}", method = RequestMethod.GET, produces = "application/json")
public String getById(@PathVariable("id") Long id) throws JsonProcessingException {
List<Objects> list = dao.findAllById(id);
return objectMapper.writeValueAsString(list);
}
}
当我通过浏览器调用REST调用的结果来检查它时,我得到了一个包含所有引用和反向引用和东西的完整列表。大。它似乎就在那里。
当我通过ajax调用时,我得到了Array [Object,1,2,3]。
我在周围寻找,并认为这可能是一个奇怪的解析事情或者可能是截断。我有
server.compression.enabled = true
所以我猜它正在压缩(使用内部Tomcat)。
有没有人有任何想法?当我使用Gson时我不记得有这个问题,我可以清楚地看到Jackson正在放入一堆“有用”的额外字段,所以我可以看到可能需要一些压缩设置或某种缓冲限制增加
答案 0 :(得分:0)
在你完成的ajax功能中尝试使用
console.log(JSON.stringify(response));
并在你的休息控制器中返回一个对象列表(它与我一起工作,我用来返回像List<Car>
这样的对象列表:
@RestController
public class RestController {
@RequestMapping(path = "mytesturl/{id}", method = RequestMethod.GET, produces = "application/json")
public List<Objects> getById(@PathVariable("id") Long id) throws JsonProcessingException {
List<Objects> list = dao.findAllById(id);
return list ;
}
}