我正在尝试使用两个可选的参数来公开用于数据查询的简单REST-API:
GET myServ/greeting?message=X&type=Y
不幸的是,我坚持使用正确的spring-data配置来启用正确的查询。下面的方法应该
虽然很简单 - 但是我不想在我的控制器中写任何if-else代码!是否启用任何开箱即用配置会导致以下行为?我尝试了不同的标准 JpaReposotory 方法和 ExampleMatchers 的混合方法,但我仍然无法使其正常工作。
我的模特:
package my.model;
import lombok.*;
import javax.persistence.*;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@ToString
public class Greeting {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String message;
private String type;
}
存储库:
package my.repository;
import my.model.Greeting;
import org.springframework.data.jpa.repository.JpaRepository;
public interface GreetingRepository extends JpaRepository<Greeting, Long>{
}
网络控制器:
package my.web;
import my.model.Greeting;
import my.repository.GreetingRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
@RestController
public class GreetingController {
@Autowired
private GreetingRepository repository;
@RequestMapping(value = "/greeting", method = GET)
public List<Greeting> get(
@RequestParam(value = "message", required = false) String message,
@RequestParam(value = "type", required = false) String type ){
return HOW_TO_DO_IT??;
}
}
答案 0 :(得分:0)
如果实体是那么简单的使用Query By Example。您的存储库需要扩展addtionaly QueryByExampleExecutor<Greeting>
。这会将方法findAll(Example<S> example)
添加到您的存储库。
然后你称之为:
Example<Greeting> example = Example.of(new Greeting("someMessage", "aType"));
repo.findAll(example);
其他选项是Criteria API和QueryDSL。提到所有三个选项here。