2016-12-14 5 views
0

あなたの視点から、Spring RESTコントローラから単純なオブジェクトを返す最良の方法は何ですか?スプリングコントローラ - 別のオブジェクトを作成する代わりにマップを返す

一つの方法は、あなたがこの種の複数のオブジェクトを持っている場合は、各オブジェクトのための多くの別々のファイルになってしまいますオブジェクト

@RestController 
public MyObj x(){...} 

class MyObj { 
    String a; 
    List<String> bList; 
} 

を作成することです。

もう一つの方法は、これが読み少し難しいですし、それが返すものを見るためにDAOを取得する必要があるマップ

@RestController 
public Map<String, List<String>>x(){ 
    return service...dao.getInfo(); 
} 

public Map<String, List<String>> dao.getInfo() {...} 

を使用することです。それは非常に良い文書が必要です。

同様の動作を得る他の方法はありますか?

マップはサービスアーキテクチャでこの問題を解決する良い方法ですか?

+0

リターン' ResponseEntity';) – emotionlessbananas

答えて

1

私はそれを行う最善の方法は、ジェネリックをペイロードとして含む汎用オブジェクトRestResponseを作成することだと思います。次に、ペイロードに対して正しい応答を作成できるファクトリを用意します。

RestResponse:

public class RestResponse<T> { 
    private int responseCode; 
    private T payload; 

    public RestResponse() { 
    } 

    public RestResponse(int responseCode) { 
     this.responseCode = responseCode; 
    } 

    public T getPayload() { 
     return payload; 
    } 

    public void setPayload(T payload) { 
     this.payload = payload; 
    } 
} 

工場:

@Component 
public class RestResponseFactory { 
    public <T> ResponseEntity<RestResponse<T>> newRestResponse(HttpStatus status) { 
     return newRestResponse(null, status); 
    } 

    public <T> ResponseEntity<RestResponse<T>> newRestResponse(T resource, HttpStatus status) { 
     RestResponse<T> response = new RestResponse<T>(); 
     response.setResponseCode(status.value()); 
     response.setPayload(resource); 
     return new ResponseEntity<RestResponse<T>>(response, status); 
    } 
} 

その後、あなたの残りのコントローラであなたは、ペイロードを生成するファクトリを使用することができるはずです。

ResponseEntity<RestResponse<MyRessource>> response = 
    responseFactory.newRestResponse(new MyRessource("SomeData"), HttpStatus.CREATED); 

これを使用すると、以下のコントローラーを使って任意のオブジェクトとの応答を生成することができます: `Iterateable`を使用して

@Controller 
@EnableAutoConfiguration 
public class MyRessourceController { 

    @ResponseBody 
    @RequestMapping(value = "/dosomething", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
    ResponseEntity<RestResponse<MyRessource>> dosomething() { 

     ResponseEntity<RestResponse<MyRessource>> response = 
       responseFactory.newRestResponse(new MyRessource("SomeData"), HttpStatus.CREATED); 


     return response; 
    } 

} 
関連する問題