Spring CrudRepository,Webservice,返回带有某些String的json对象

时间:2017-09-16 17:03:44

标签: java spring hibernate spring-mvc jpa

我对Spring Boot开发很新,我需要一些特殊情况的帮助。

我正在使用JPA / Hibernate Spring和CRUDrepository创建一个RESTful webservices。(Json格式)

我有以下表格跟踪:

    +----+----------+-----------+
    | id |  filename            |
    +----+----------+-----------+
    |  1 |  public/11111/Cool  |
    |  2 |  public/22222/Cool  |
    |  3 |  public/33333/Cool  |
    |  4 |  public/44444/Cool  |
    |  5 |  public/55555/Cool  |
    |  6 |  public/66666/Cool  |
    |  7 |  private/77777/Cool |
    |  8 |  private/88888/Cool |
    |  9 |  private/99999/Cool |
    +----+----------+-----------+

我有以下实体:

@Entity
public class Track{

    @Id
    @Column(name="id")
    private int id;

    @Column(name="filename")
    private String filename;

    public Track() {
        super();
    }

    public Track(int id, String filename) {
        super();
        this.id= id;
        this.filename= filename;
    }

    public int getid() {
        return id;
    }

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

    public String getfilename() {
        return dateiName;
    }

    public void setfilename(String filename) {
        this.filename = filename;
    }
}

CRUD:

public interface TrackRepository extends CrudRepository<Track, Integer> {

    List<Track> findByid(int id);

}

控制器:

@Controller
@RequestMapping(path="rest/music")
public class TrackController {

    @Autowired
    private TrackRepository trackRepository;

    @GetMapping(path="/all")
    public @ResponseBody Iterable<Track> getAllTrack() {
        return trackRepository.findAll();
    }

    @GetMapping(path="/id")
    public @ResponseBody Iterable<Track> 
    getTrackById(@RequestParam("id") int id){
        return trackRepository.findByid(id);

    }
    @GetMapping(path="/public")
    public @ResponseBody Iterable<Track> 
    getPublicTrack(){
        return ...working

    }
    @GetMapping(path="/private")
    public @ResponseBody Iterable<Track> 
    getPrivateTrack(){
        return ...working

    }

}

所以我可以通过id获取所有Track或搜索它们。

现在我的问题是如何将所有电影名称以“公共”或“私人”开头的曲目返回。

所以我得到一个json响应,如:

私人:

[
       {
            "id": 7,
            "filename": "private/77777/Cool"
       }
       {
            "id": 8,
            "filename": "private/88888/Cool"
       }
       {
            "id": 9,
            "filename": "private/99999/Cool"
       }
]

我有点需要过滤文件名字符串然后......我只是无法得到解决方案。

1 个答案:

答案 0 :(得分:2)

你可以使用hql

来做到这一点
  public interface MusicRepository extends CrudRepository<Music, Integer> {

List<Music> findByid(int id);

@Query("Select m from Music m where m.filename like '%private' or m.filename like '%public'")
List<Music> findCustom();
}