当前位置: 首页 > 知识库问答 >
问题:

Spring POST接收具有空值的对象

郜谦
2023-03-14

我有一个AngularJS Web应用程序,它看起来像是正确地将JSON发送到Tomcat服务器,但是服务器接收空值。这个问题没有帮助,因为我的属性名称已经是小写的,这个问题没有帮助,因为我已经得到了@刚体符号。编辑:正如评论中指出的,我实际上没有这个符号。我看错了。

下面是有问题的服务器方法:

@PostMapping(path="/kind/add")
public @ResponseBody String addNewKind(Kind kind) throws Exception {
    if (kind.getName() == null) {
        throw new Exception("Name not found.");
    }
    kindRepository.save(kind);
    return "Saved";
}

以下是它期望接收的Kind对象:

@Entity
public class Kind {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    @OneToMany(mappedBy="kind")
    private Set<Card> cards;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Card> getCards() {
        return cards;
    }

    public void setCards(Set<Card> cards) {
        this.cards = cards;
    }
}

以下是发出请求的方法

var uri = 'http://localhost:8080/catalog/api/kind/';

function create(name) {
    var deferred = $q.defer();
    var data = {
        'name': name
    };
    $http({
        method: 'POST',
        url: uri + 'add',
        data: angular.toJson(data),
        headers: {
            'Content-Type': 'application/json; charset=UTF-8'
        }
    }).then(function(response) {
        deferred.resolve(response.data);
    }).catch(function(error) {
        console.error('Error while adding kind');
        deferred.reject(error);
    });
    return deferred.promise;
}

这是发送到服务器的JSON:

{"name":"Something"}

注意:我假设我可以不发送idcards参数就离开,因为id是自动生成的,cards可以是空的;但是,在发送以下JSON时,我会得到相同的空结果:

{"id":0,"name":"Something","cards":[]}

这些是请求标头:

Accept:           application/json, text/plain, */*
Accept-Encoding:  gzip, deflate
Accept-Language:  en-US,en;q=0.5
Connection:       keep-alive
Content-Length:   20
Content-Type:     application/json; charset=UTF-8
Cookie:            __distillery=08c4ef1_752470a4-…ID=lr9remoqoi0ht13v1urq5lq8r7
Host:             localhost:8080
Referer:          http://localhost:8080/catalog/
User-Agent:       Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0

这是我在调试模式下查看kind对象参数时服务器收到的:

kind= Kind
    cards= null
    id= 0
    name= null

共有1个答案

段干弘扬
2023-03-14

您需要在方法上使用@刚体注释。您的控制器不知道主体是什么,所以您发布的对象永远不会绑定(或者永远不会“使其”)到您的方法的Kind参数。

@PostMapping(path="/kind/add")
public String addNewKind(@RequestBody Kind kind) throws Exception {
    if (kind.getName() == null) {
        throw new Exception("Name not found.");
    }
    kindRepository.save(kind);
    return "Saved";
}

如果希望返回新的“种类”,则希望控制器方法如下所示:

@PostMapping(path="/kind/add")
public Kind addNewKind(@RequestBody Kind kind) throws Exception {
    if (kind.getName() == null) {
        throw new Exception("Name not found.");
    }
    return kindRepository.save(kind);
}

顺便说一下,我注意到您在编写JSON时使用了单引号。由于您正在使用angular.toJson()转换数据,因此您在那里应该没问题。如果您试图通过直接发送JSON字符串进行交互,这通常不会起作用。JSON不使用单引号。

 类似资料:
  • 我有一个AngularJS Web应用程序,它看起来像是正确地将JSON发送到Tomcat服务器,但是服务器接收空值。这个问题没有帮助,因为我的属性名称已经是小写的,这个问题没有帮助,因为我已经得到了符号。编辑:正如评论中指出的,我实际上没有这个符号。我看错了。 下面是有问题的服务器方法: 以下是它期望接收的Kind对象: 以下是发出请求的方法: 这是发送到服务器的JSON: 注意:我假设我可以不

  • 我正在编写一个SPRING控制器来管理一些实体,在尝试编辑现有对象时遇到了问题。 以下是生成问题的get/post映射: 类别类别如下: 当我试图编辑一个对象时,正如您在日志底部看到的,它直接来自DB,但当它来自时,字段为。 ajax调用是这样完成的: 我已经读过了,但是如果我把放到 即使我把属性。 我知道我可以通过另一次调用DB来获得旧数据,但我希望有一种最干净的方法 解决方案:我已经解决了编辑

  • 我正在使用一个可打包对象来传递一个意图。我的对象看起来是这样的 公共类配方实现Parcelable{private List Recipe=null;private List firedents=null;private String preparation; 我调试了这部分代码,我知道sendRecipe对象是实例化的,数据是正确的。所以我把这个东西放在意向性上,然后把它发送到下一个活动 在这个

  • 使用Apache camel 2.15.3创建了SOAP服务,一切正常,即使响应SOAP正文也是有效的。 骆驼2.15.3依赖于cxf 3.0.6 但是当我将cxf-core更新到3.1.3时,一切都很好,除了SOAP响应体是空的。 没有错误日志,服务器启动正常。 我是否缺少一些依赖项? POM。xml

  • 问题内容: 我们有一些代码根据其坐标之间的距离对地址列表进行排序。这是通过使用自定义比较器的collections.sort完成的。 但是,列表中有时不包含地址,这会导致NullPointerException。解决这个问题的最初想法是让比较器返回至少0个坐标为零的地址的距离。我担心这可能导致列表中“有效”元素的顺序损坏。 因此是否可以在比较器中为空数据返回“ 0”值,还是有一种更干净的方法来解决

  • 考虑这个简单的例子: 此代码将打印,但是,如果我对每个