私は@RestController
は@PathVariable
特定のオブジェクトをJSON形式で、適切なステータスコードとともに返します。これまでのコードは、デフォルトでJacksonライブラリに組み込まれたSpring 4を使用しているため、JSON形式でオブジェクトを返します。
しかし、私はそれを作成する方法がわかりませんので、API変数、JSONデータ、エラーコード(またはすべてがうまくいったかどうかに応じて成功コード)が欲しいというメッセージをユーザーに提供します。出力例は次のとおりです。
パラメーターとしてAPI値を入力してください(必要に応じてJSONでも可能です)
{"id":2、 "api": "3000105000" ...}(これはJSON応答オブジェクトになります)
ステータスコード400(または適切なステータスコード)
パラメータ付きのURLは次のようになります
http://localhost:8080/gotech/api/v1/api/3000105000
私がこれまでに持っているコード:
@RestController
@RequestMapping(value = "/api/v1")
public class ClientFetchWellDataController {
@Autowired
private OngardWellService ongardWellService;
@RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
@ResponseBody
public OngardWell fetchWellData(@PathVariable String apiValue){
try{
OngardWell ongardWell = new OngardWell();
ongardWell = ongardWellService.fetchOneByApi(apiValue);
return ongardWell;
}catch(Exception ex){
String errorMessage;
errorMessage = ex + " <== error";
return null;
}
}
}
@RestController
はこれには適していません。さまざまな種類の応答を返す必要がある場合は、ResponseEntity<?>
を使用して、ステータスコードを明示的に設定できます。
body
のResponseEntity
は、@ResponseBody
アノテーション付きメソッドの戻り値と同じ方法で処理されます。
@RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
public ResponseEntity<?> fetchWellData(@PathVariable String apiValue){
try{
OngardWell ongardWell = new OngardWell();
ongardWell = ongardWellService.fetchOneByApi(apiValue);
return new ResponseEntity<>(ongardWell, HttpStatus.OK);
}catch(Exception ex){
String errorMessage;
errorMessage = ex + " <== error";
return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST);
}
}
@ResponseBody
注釈付きクラス内の@RequestMapping
メソッドで@RestController
は必要ないことに注意してください。
慣用的な方法は、通常のリクエスト処理メソッドで例外をキャッチする代わりに、例外ハンドラを使用することです。例外のタイプにより、応答コードが決まります。 (セキュリティエラーの場合は403、予期しないプラットフォームの例外の場合は500、好きなもの)
@ExceptionHandler(MyApplicationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleAppException(MyApplicationException ex) {
return ex.getMessage();
}
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAppException(Exception ex) {
return ex.getMessage();
}