2017-01-05 2 views
0

このような初心者の質問にお詫び申し上げます!Springデータを返さずにクエリを実行する方法を教えてください。

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> { 
    List<Person> findByLastName(@Param("name") String name); 
} 

しかし、私は同じ情報を照会することができますどのように、そして、それをクライアントに返す前に、その上に論理的な変換のいくつかの並べ替えを実行します。

私はこれを行うことができ、春ブーツのドキュメントから知っていますか?

findByLastNameを使用すると、DBの結果が直接返されます。

+1

* ...論理変換*あなたがより多くの回答を得かもしれませんやりたいかもしれないもののより具体的な例のいくつかの並べ替えを行います。 –

+0

Spring Data Restは、返されたデータをある程度修正するための予測と抜粋を提供しますが、Alanの説明によれば、特定のユースケースの例を挙げる必要があります。 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts – PaulNUK

+0

私は何らかの論理的な変換を意味していますが、結果を取り上げてそれらをカテゴリにグループ化したり、カスタムソート関数やカスタムフィルタを適用したりすると、それが役に立ちます。私は基本的には、DBから結果セットを取得し、クライアントに返す前に結果セットに何かを行うことを意味します。たとえば、日付の書式設定などの単純な操作が可能です。 – SimBot

答えて

2

私にも同様の問題がありましたが、私が問題を理解する限り、私とあなたがそれを行うための便利な解決法はありません。 あなた自身のコントローラーを実装し、すべてのロジックに対応する必要があります。 @RepositoryRestControllerを見て、あなた自身のロジックで独自のメドゥを実装してください。 あなたは通常、春にそうであるように、私はイベントサービスのビジネス・ロジックの完全な実装と交流

@RestController 
@RepositoryRestController 
@RequestMapping(value = "/event/") 
public class EventController { 

    @Autowired 
    EventService eventService; 

    @RequestMapping(value = "/upcoming", method = RequestMethod.GET) 
    List<EventProjection> checkIfUserParticipatesUpcoming(@RequestParam(value = "userId") String userId) { 
      return eventService.checkIfUserParticipatesUpcoming(userId); 
    } 
} 

を来たソリューション。

Spring-Data-Rest基本的なものは素晴らしいですが、あなたが望むほど伸縮性がありません。

もっと良い回答がある場合は、私もそれを聞いてうれしく思います。

*少し注意して、私は罪人です。戻り値の型はHttpEntityで、サーバー200/201/204の互換性のある戻り値の型となっていますが、私は開発段階にあり、まだ生産中ではありません。

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.overriding-sdr-response-handlers

public class ScannerController { 

    private final ScannerRepository repository; 

    @Autowired 
    public ScannerController(ScannerRepository repo) { 
     repository = repo; 
    } 

    @RequestMapping(method = GET, value = "/scanners/search/listProducers") 
    public @ResponseBody ResponseEntity<?> getProducers() { 
     List<String> producers = repository.listProducers(); 

     // 
     // do some intermediate processing, logging, etc. with the producers 
     // 

     Resources<String> resources = new Resources<String>(producers); 

     resources.add(linkTo(methodOn(ScannerController.class).getProducers()).withSelfRel()); 

     // add other links as needed 

     return ResponseEntity.ok(resources); 
    } 

} 

注:*

+0

この種の答えは私の質問です。実際、私が探していた答えを見つけることができました。おそらく、リポジトリ内のメソッドの1つを呼び出すサービスメソッドを呼び出すコントローラにrequestMappingを定義することが考えられます。この例を参照してください:http://javabeat.net/spring-data-jpa/ – SimBot

+0

これはまさに私が「通常、春に行うように、イベント・サービスでビジネス・ロジックを完全に実装する」と言いました。私のコード例で見ることができるように、私は実際のbuiness論理が属するサービスを参照しています – NiNiCkNaMe

0

この質問をした後、私はその後、これを達成するために正確にどのように概要を説明し、次のマニュアルを参照して、見つかったあなたも作るために以下のパッケージをインポートする必要がありますこの作品:

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; 
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; 
関連する問題