[英]How can i create new score for existing player and game at the different time in the POST method of Spring Boot rest api
[英]REST method to Create new resource using POST
我的请求中没有ID。
服务器将使用自动生成的ID创建新资源(即使同一数据存在,但ID也不同),例如1234
必须在响应中返回新的资源位置/ users / 1234
现在,我是否应该仅将新ID作为响应中的返回值或输入请求中设置的新ID返回并返回整个实体? {“ id”:1234,“ name”:“ Mr。 伍兹”,“年龄”:29}
另外,当一个请求到达POST / users但已经在输入中提供了ID时,我们是否需要在创建一个新请求之前验证它是否为null? 如果输入中存在ID,在这种情况下,Http响应代码是什么?
我将使用spring hateoas( https://spring.io/projects/spring-hateoas )并创建一个像这样的对象:
public class User extends ResourceSupport {
private Long id;
private int age;
private String name;
//Setter and getter and eventually hashCode and equals
}
然后在控制器中,我将采用以下方法:
@RequestMapping(value="/users", method={RequestMethod.POST}, produces="application/json")
public ResponseEntity<User> managePerson(@RequestBody User p)
{
if(p.getId() != null)
{
//Update; in this case a 204 http status is enough and no content is required
Return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
}
else
{
//Save and return the saved objecty with the returned ID and set the new location
p.add(new Link("/users/"+p.getId()));
Return ResponseEntity.status(HttpStatus.OK).body(p);
}
}
现在,我是否应该仅将新ID作为响应中的返回值或输入请求中设置的新ID返回并返回整个实体? {“ id”:1234,“ name”:“ Mr。 伍兹”,“年龄”:29}
成功的Rest POST
请求不一定需要具有响应正文,总的来说,如果这些完全是请求中提供的相同数据+创建的ID。
在location header
中包含所创建资源的URI的201 Created
响应看起来不错。
这并不意味着禁止在POST响应中设置正文,仅当它为客户端添加了一些附加值时才应设置它。
例如,假设资源创建可能会更改客户端提供的数据(清理,计算等),那么在主体响应中设置资源可能是有意义的。
另外,当一个请求到达POST / users但已经在输入中提供了ID时,我们是否需要在创建一个新请求之前验证它是否为null? 如果输入中存在ID,在这种情况下,Http响应代码是什么?
这取决于您希望Rest服务的行为方式:
POST
:在该ID是否这种情况下null
,创建资源,如果它不是null
,您更新资源,如果一切都很好,你可以返回202 Accepted
。 POST
更新是不合法的:在另一种情况下,如果ID不为null
,则会返回错误响应,例如400 Bad Request
。 我的请求中没有ID。
您不需要一个。 您只需为此使用Db-SDK。
必须在响应中返回新的资源位置/ users / 1234
最好使其成为超媒体驱动的系统HATEOS
现在,我是否应该仅将新ID作为响应中的返回值或输入请求中设置的新ID返回并返回整个实体? {“ id”:1234,“ name”:“ Mr。 伍兹”,“年龄”:29}
就像我说的那样,返回完整的超媒体信息是很好的,这样客户端可以无需进一步修改即可引用它们,以发出任何轻松的请求
{
"id": 1234,
"name": "Mr.Woods",
"age": 29,
"address": "/1234/address",
"some-param": "/path-to-the-resource"
}
另外,当一个请求到达POST / users但已经在输入中提供了ID时,我们是否需要在创建一个新请求之前验证它是否为null?
理想情况下,如果遵循HTTP规范,则应对其进行验证。 发布应始终导致资源的创建。 但是,这只是遵循规范,如果您希望使POST幂等,则不会阻止您
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.