[解決済み] Spring MockMVCを使ったSpringの@RequestBodyのテスト
2023-04-23 20:20:20
質問
SpringのMockMVCフレームワークを使用して、データベースにオブジェクトをポストするメソッドをテストしようとしています。 私は次のようにテストを構築しました。
@Test
public void testInsertObject() throws Exception {
String url = BASE_URL + "/object";
ObjectBean anObject = new ObjectBean();
anObject.setObjectId("33");
anObject.setUserId("4268321");
//... more
Gson gson = new Gson();
String json = gson.toJson(anObject);
MvcResult result = this.mockMvc.perform(
post(url)
.contentType(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(status().isOk())
.andReturn();
}
私がテストしているメソッドは、Springの@RequestBodyを使用してObjectBeanを受け取りますが、テストは常に400エラーを返します。
@ResponseBody
@RequestMapping( consumes="application/json",
produces="application/json",
method=RequestMethod.POST,
value="/object")
public ObjectResponse insertObject(@RequestBody ObjectBean bean){
this.photonetService.insertObject(bean);
ObjectResponse response = new ObjectResponse();
response.setObject(bean);
return response;
}
テスト中のgsonで作成したjsonです。
{
"objectId":"33",
"userId":"4268321",
//... many more
}
ObjectBeanクラス
public class ObjectBean {
private String objectId;
private String userId;
//... many more
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
//... many more
}
そこで質問ですが、Spring MockMVCを使ってこのメソッドをテストするにはどうしたらよいでしょうか?
どのように解決するには?
これを使う
public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
@Test
public void testInsertObject() throws Exception {
String url = BASE_URL + "/object";
ObjectBean anObject = new ObjectBean();
anObject.setObjectId("33");
anObject.setUserId("4268321");
//... more
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String requestJson=ow.writeValueAsString(anObject );
mockMvc.perform(post(url).contentType(APPLICATION_JSON_UTF8)
.content(requestJson))
.andExpect(status().isOk());
}
コメントにあるように、これはオブジェクトがjsonに変換されてリクエストボディとして渡されるため動作します。さらに、contentTypeはJson(APPLICATION_JSON_UTF8)として定義されています。
関連
-
[解決済み] Springの@RequestBodyと@ResponseBodyアノテーション
-
[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
-
[解決済み] Springのオートワイヤリングの仕組みは?
-
[解決済み] Spring MVCの@ModelAttributeとは何ですか?
-
[解決済み] springの@Controllerアノテーションと@RestControllerアノテーションの違いについて
-
[解決済み] JAX-RSとSpring Restの違いについて
-
[解決済み] Spring Controller のマッピングで url のパラメータを受け取るには?
-
[解決済み] SwaggerのURLに認証なしでアクセスできるようにSpring Securityを設定する方法
-
[解決済み] 複数の @ControllerAdvice @ExceptionHandler の優先順位を設定する。
-
[解決済み] SpringBootテストで異なるapplication.ymlを読み込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】BindingResultもBean名のプレーンターゲットオブジェクトもリクエスト属性として利用できない [重複].
-
[解決済み] Spring 3 リクエスト処理に失敗しました。ネストされた例外は java.lang.NullPointerException です。
-
[解決済み] Spring SecurityのantMatcher()はいつ使うのか?
-
[解決済み】Spring MVCで静的コンテンツを処理する方法は?
-
[解決済み] JAX-RSとSpring Restの違いについて
-
[解決済み] Spring mvc @PathVariable
-
[解決済み] Spring-mvcでSession属性を使用する方法
-
[解決済み] 複数の @ControllerAdvice @ExceptionHandler の優先順位を設定する。
-
[解決済み] Spring Cloud GatewayはZuulとどう違うのですか?
-
[解決済み] SpringBootテストで異なるapplication.ymlを読み込む