私は、POSTリクエストを受信して、JSON出力を返すために、コントローラを持っています。コントローラクラスの内部で実装された例外ハンドラは罰金を働きました。
私はグローバル例外処理を追加しようとした@ControllerAdvice
注釈が、これは私の解決策では機能しません。私は、グローバルな例外ハンドラクラスがロードされているとは思いません。
以下は私のコントローラクラスは次のとおりです。
package hello;
@Controller
@RequestMapping("/v1")
public class MyController {
@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public String saveEmployee(@Valid @RequestBody Employee employee) {
return "{ \"name\":\"" + employee.getEmail() + "\"}";
}
}
以下は、グローバル例外ハンドラクラスは、次のとおりです。
package util;
@ControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler(MethodArgumentNotValidException.class)
// @ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public String processValidationError(MethodArgumentNotValidException ex) {
BindingResult result = ex.getBindingResult();
FieldError fieldError = result.getFieldError();
String code = fieldError.getCode();
String field = fieldError.getField();
String message = fieldError.getDefaultMessage();
message = "{ \"Code\":\"" + code + "\",\"field\":\"" + field + "\",\"Message\":\"" + message + "\"}";
return message;
}
}
以下は私の構成は以下のとおりです。
package hello;
@SpringBootApplication
public class Application {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
春のブートバージョン:2.0.3.RELEASE
私はあなたがここに持っている問題は、あなたが特定され、正確に何だと思います。MyControllerAdvice
クラスがロードされていません。あなたが投稿コードから、私はあなたのプロジェクトの構造は以下のようになりますことを推測しています:
src
main
java
hello
Application.java
MyController.java
util
MyControllerAdvice.java
あなたが持っているのでSpringBootApplication
、あなたの上に注釈をApplication
クラス、春ブーツは、豆を作成するための開始点としてそれを使用し、それはのようなもので注釈を付けたクラスを探します@Controller
し、@ControllerAdvice
そのコンテキストに追加する(とりわけ)。
あなたが出始めたり、比較的小規模なプロジェクトで作業している場合、それはここに春の勧告に合うように再構築になることが、最も簡単な設定するには、多くの異なる方法があります。
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-structuring-your-code.html
このページには、非常に短いと価値背景を得るために読んだが、本質はあなたが欲しいということです@SpringBootApplication
あなたは春が管理するすべてのクラスと同じパッケージまたは親パッケージ内の注釈付きクラスを、上記のページには、次の例を示します:
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
だから、あなたの場合には、これは移動のいずれかを意味しますutil
下のパッケージをhello
のように、:
src
main
java
hello
Application.java
MyController.java
util
MyControllerAdvice.java
または両方の親パッケージを作成hello
し、util
移動Application
のように、そのパッケージまで:
src
main
java
example
Application.java
hello
MyController.java
util
MyControllerAdvice.java