条目创建返回201,但访问它返回404
问题描述:
我有一个简单春数据休息实现使用休眠和MongoDB的用户创建的。条目创建返回201,但访问它返回404
User.java:
@Data
@Entity
@RequiredArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private @Id String username;
private String about;
}
UserRepository.java
@PreAuthorize("hasRole('ROLE_USER')")
@CrossOrigin(methods = {GET, PUT, POST})
public interface UserRepository extends MongoRepository<User, String> {
@Override
@PreAuthorize("hasRole('ROLE_ADMIN')")
<S extends User> S save(S s);
}
然后我做一个POST调用/users
这身搭配:
{
"username": "username1",
"about": "example"
}
我得到一个201 Created
响应与以下机构:
{
"about": "example",
"_links": {
"self": {
"href": "http://localhost:8080/api/users/username1"
},
"user": {
"href": "http://localhost:8080/api/users/username1"
}
}
}
我做GET
请求/users
,看是否确实添加了用户并返回此响应是理所当然的:
{
"_embedded": {
"users": [
{
"about": "example",
"_links": {
"self": {
"href": "http://localhost:8080/api/users/username1"
},
"user": {
"href": "http://localhost:8080/api/users/username1"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/api/users{?page,size,sort}",
"templated": true
},
"profile": {
"href": "http://localhost:8080/api/profile/users"
}
},
"page": {
"size": 20,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
的问题
但后来我访问链接中提供的用户的URL,即http://localhost:8080/api/users/username1
,但我得到一个404 Not Found
响应。
我在做什么错?我试过看例子和文档,但似乎没有做这项工作。如果我添加@AutoGenerated
注释它可以工作,但我显然希望id
由请求提供为username
。
答
在User.java
,我改变了username
的声明如下:
@Id
@JsonProperty("username")
@NotBlank
private String id;
MongoDB的要求_id
作为默认每个文件,否则它不会得到索引的主键。我必须将字段名称更改为id,以便在MongoDB上转换为_id
,并使用@Id
注释。为了解决这个问题,我使用@JsonProperty("username")
来获取请求的JSON主体的username
属性的值。