次の Spring コードがあるとします。
@Controller
@RequestMapping("/somepath")
public class SomeService {
@RequestMapping(headers = "Accept=application/json")
public ReturnType methodOne() {
// stuff
}
@RequestMapping(headers = "Accept=text/html")
public ReturnType methodTwo() {
// stuff
}
}
クライアントに「Accept」ヘッダーがまったく含まれていない場合、常に「application/json」メソッドが text/html メソッドよりも優先して呼び出されることに気付きました。私の質問は - なぜですか?どちらかを選択する必要はありません。代わりにエラーメッセージが表示されることを期待していました...
具体例:
@RequestMapping("/somepath")
@Controller
public class SomeService {
@ResponseBody
@RequestMapping(headers = "Accept=application/json")
public ResponseEntity<String> methodOne() {
return new ResponseEntity<String>("Method One", HttpStatus.OK);
}
@ResponseBody
@RequestMapping(headers = "Accept=text/html")
public ResponseEntity<String> methodTwo() {
return new ResponseEntity<String>("Method Two", HttpStatus.OK);
}
@ResponseBody
@RequestMapping(headers = "Accept=application/xml")
public ResponseEntity<String> methodThree() {
return new ResponseEntity<String>("Method Three", HttpStatus.OK);
}
}
Accept ヘッダーがない場合は、常に「Method One」が出力されます。