【问题标题】:Can i send java object in a json response我可以在 json 响应中发送 java 对象吗
【发布时间】:2019-10-12 22:16:28
【问题描述】:

例如我有java类帖子:

public class Post{
String title;
String text;
}

如果我创建这个类的一个实例并在我的 servlet 控制器中将其转换为 ajax 响应

@RestController
public class AjaxNewsController {
 @JsonView(Views.Public.class)
    @PostMapping(value = "/getPost")
    public AjaxResponseBody getSearchResultViaAjax(@RequestBody AjaxPostResponse postId) {
        AjaxResponseBody result = new AjaxResponseBody();
        result.setCode("200");
        result.setMsg("found POST");
        result.setResult(post);
        return result;

    }
}

我的问题是:我可以在客户端使用 javascript 检索帖子字段的标题和文本吗?如果可以,那么如何?

这是我在浏览中的响应的控制台示例 console

但是我怎样才能用 ajax 和 jquery 中的字段提取我的帖子呢?

UPD

经过一些研究后,我发现不知何故我的 serlvet 不会将我的 java pojo 转换为 json。我该怎么做?

UPD2

我的请求发送正常,但 serlvet 没有将 POST 类转换为 json。

这是我的javascript:

function likePost(postId,ratingElem, ratingChange) {

    var search = {}
    search["postId"] = postId;
    search["rating"] = ratingChange;

    $.ajax({
        type : "POST",
        contentType : 'application/json; charset=utf-8',
        dataType : 'json',
        url : "likePost",
        data : JSON.stringify(search),
        timeout : 100000,
        success : function(data) {
            console.log("SUCCESS: ", data);
            changeRating(ratingElem,data.post.getTopic());
        },
        error : function(e) {
            console.log("ERROR: ", e);
            changeRating(ratingElem,'error');
        },
        done : function(e) {
            console.log("DONE");
            enableSearchButton(true);
        }
    });

}

状态和消息都很好,但结果是空的。

【问题讨论】:

  • 是的,你可以这样做。在浏览器上查看此 api 的响应或通过邮递员等任何 API 测试工具进行检查。

标签: javascript java jquery json


【解决方案1】:

试试看:

var req = new XMLHttpRequest();
req.open('POST', 'your_url', false); 
req.send(null);
if(req.status == 200)
dump(req.responseText);

如果您想从其他域获取数据,请阅读 cors

【讨论】:

  • 我需要从数据中检索 pojo 作为响应,而不是发送请求。
【解决方案2】:

所以我解决了我的问题。我使用 com.fasterxml.jackson.core 所以我只需要在我的类中标记我想用 @JsonView 注释转换成 json 的字段,比如

 @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "post_id",
            unique = true, nullable = false)
    @JsonView(Views.Public.class)
    private Integer postId;

所有标记的都将被转换。

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2017-09-15
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多