2017-10-21 135 views
0

我有一个简单春数据休息实现使用休眠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

回答

0

User.java,我改变了username的声明如下:

@Id 
@JsonProperty("username") 
@NotBlank 
private String id; 

MongoDB的要求_id作为默认每个文件,否则它不会得到索引的主键。我必须将字段名称更改为id,以便在MongoDB上转换为_id,并使用@Id注释。为了解决这个问题,我使用@JsonProperty("username")来获取请求的JSON主体的username属性的值。