相关疑难解决方法(0)

如何在Spring MVC控制器中应用Spring Data投影?

是否可以直接指定projection何时调用数据存储库方法?这是存储库代码 - 注意我不想通过REST公开它,而是希望能够从服务或控制器中调用它:

@RepositoryRestResource(exported = false)
public interface UsersRepository extends PagingAndSortingRepository<User, Long> {

    @Query(value = "SELECT u FROM User u WHERE ....")
    public Page<User> findEmployeeUsers(Pageable p);
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中我这样做:

@PreAuthorize(value = "hasRole('ROLE_ADMIN')")
@RequestMapping(value = "/users/employee")
public Page<User> listEmployees(Pageable pageable) {
    return usersRepository.findEmployeeUsers(pageable);
}
Run Code Online (Sandbox Code Playgroud)

有没有什么方法来指定projectionfindEmployeeUsers,当它被称为直接像上面的方法?

我意识到上面的代码对于某些人来说可能看起来很奇怪......可以通过REST公开存储库并将其放入@PreAuthorize存储库中.思想控制器是进行安全检查的最佳位置 - 测试更自然,更简单.

那么,可以projection以某种方式将事物传递到直接调用的存储库方法中吗?

spring spring-security spring-data

21
推荐指数
1
解决办法
1万
查看次数

为什么摘录投影不会自动应用于Spring Data REST项目资源?

我做了一个应该暴露嵌套实体的投影:

@Projection(name = "inlineBusiness", types = { UserModel.class })
public interface InlineBusinessUserModelProjection {

    String getUsername();

    String getFirstName();

    String getLastName();

    Date getBirthdate();

    String getEmail();

    BusinessModel getBusiness();
}
Run Code Online (Sandbox Code Playgroud)

和服务存储库:

@RepositoryRestResource(collectionResourceRel = "users", path = "users",
       excerptProjection = InlineBusinessUserModelProjection.class)
public interface UserRepository extends BaseDAO<UserModel> {..}
Run Code Online (Sandbox Code Playgroud)

因为/users它工作正常,业务领域暴露与嵌套实体,但当我调用/users/1- 没有,也所有自定义方法..似乎投影不参与任何方法除了/users 任何想法?

spring spring-mvc spring-data spring-data-rest

18
推荐指数
1
解决办法
9478
查看次数

Spring:无法持久保存用@JsonIgnore注释的实体

我是 Spring Boot 的初学者,无法解决问题。我有一个实体类 (Customer) 和一个 REST 存储库 (CustomerRepository)。该类包含一些我不希望 REST 存储库公开的敏感字段。因此,我使用 @JsonIgnore 注解对这些字段进行注解,如下所示:

package br.univali.sapi.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Customer
{
    @Id
    @GeneratedValue
    private Long id = null;

    private String login;

    private String name;

    @JsonIgnore
    private String password;

    @JsonIgnore
    private String email;

    public Customer()
    {

    }

    public Long getId()
    {
            return id;
    }

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

    public String getLogin()
    { …
Run Code Online (Sandbox Code Playgroud)

java spring-data spring-data-jpa spring-data-rest

7
推荐指数
1
解决办法
3191
查看次数