Ajax + Spring Boot / Spring MVC / Jackson +数据被截断了吗?

时间:2018-02-01 14:47:48

标签: java json ajax rest spring-mvc

我有一个带有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正在放入一堆“有用”的额外字段,所以我可以看到可能需要一些压缩设置或某种缓冲限制增加

1 个答案:

答案 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 ;
   }
}