ContactManager、パート4。Webサービスの追加(REST)

ContactManagerアプリケーションの以前のバージョンのインクが枯渇するに、電話が鳴り、レシーバーで友人の声が聞こえました。Androidの開発をマスターし始め、Webサービスの操作を練習できるテストプロジェクトを探していました。

「これ以上簡単なことはありません!」私は答えた。

では、現時点では何がありますか?
ブラウザで実行されるWebアプリケーションでは、承認のために、ユーザーはユーザー名とパスワードを入力する必要があります。 コントローラーは、特定のJSPページをユーザーに表示するビューを管理します。

Webサービスの場合、ログインフォーム、JSPページはありません。 1つの強固なHTTP:データはリクエストで送信され、JSONの形式で返されます(オプション-XML)。

作業計画:


「ポイントを右に向かって行きましょう」(C)。

1.セキュリティ設定を追加します。

Webサービスのセキュリティは、 基本認証メカニズムを使用して実装できます。 Springがこのメカニズムをどのようにサポートしているか見てみましょう。

最初に、リクエストの形式を決定しましょう。 ブラウザーを操作するためのURLのセットは既にあり、サンプルとして使用できます。 WebサービスのURLを/wsニーモニックプレフィックスの後ろに「隠す」だけです。 つまり、次のアドレスセットを処理する必要があります: /ws/index/ws/add/ws/delete 。 ルート " /ws "へのアクセスは、必要がないため、自発的な決定によって禁止します。

Springでは、単一のセキュリティファイルで複数のhttp要素を指定できます。 これを活用してください。 先頭に追加:
  <http realm="Contact Manager REST-service" pattern="/ws/**" use-expressions="true"> <intercept-url pattern="/ws/index*" access="hasAnyRole('ROLE_USER','ROLE_ANONYMOUS')" /> <intercept-url pattern="/ws/add*" access="hasRole('ROLE_USER')" /> <intercept-url pattern="/ws/delete/*" access="hasRole('ROLE_ADMIN')" /> <intercept-url pattern="/ws/**" access="denyAll" /> <http-basic/> </http> 

このセクションは、既存の設定の前に最初に追加することが重要ですが、より具体的であるため、 /wsプレフィックスを含む要求をタ​​イムリーにインターセプトするには、最初に処理する必要があります。

何が変わった? ほんの少し。 JSPに関連するものはすべてなくなり、ロールチェックは式メカニズムuse-expressions="true" (ただし、これは単なる例として重要ではありません)。 /wsプレフィックスが使用可能なすべてのURLに追加され、 /wsルートへのアクセスは全員に拒否されます( denyAll )。 他のSPEL式の使用例はここにあります 。 繰り返します-マスクの順序は重要です。最も一般的な/ws/**最後です。 美のためにrealm属性が再び追加されます。誰かがブラウザを介して連絡先リストのJSONを賞賛することに決めた場合、承認ウィンドウに表示されます。

そして、知覚できない<http-basic/>要素はすでに保護されています。 この短い構造の背後に、Spring(通常のスタイル)は、この基本認証のメカニズムの複雑さを開発者から隠しています。 そして、これに彼を信頼しない理由はありません。 1つ下がって、あと2つ。 コントローラーを見てみましょう。
NBテスト用のメインファイルである2つのsecurity.xmlファイルがあることを忘れてはなりません。 両方に変更を加える必要があります。

2.コントローラーを追加します。

JSPのコントローラーをWebサービスのコントローラーにするにはどうすればよいですか? とても簡単です。 既存のメソッドは、名前ビューまたは転送/リダイレクトページで文字列を返しますが、データ(コントラクトとそのタイプのリスト)はモデル属性で転送されます。 Webサービスメソッドは、JSONでのシリアル化に適したオブジェクトを返す必要があります。 さらに、POSTメソッド/ws/addは、JSONの形式で新しい連絡先のデータをリクエストボディに直接文字列として受け取ります。 ビジネスの時間です。

古いコントローラーと同じパッケージに新しいContactWsController.javaファイルを作成します。 そして、クラスレベルですぐに、これがWebサービスであるという主張を示します。
 @Controller @RequestMapping(value = "/ws", produces = MediaType.APPLICATION_JSON_VALUE) public class ContactWsController { @Autowired private ContactService contactService; } 

クラスレベルの@RequestMapping(value="/ws")は、個々のメソッドのすべてのURLに自動的に追加される共通のプレフィックスを設定します。 produces = MediaType.APPLICATION_JSON_VALUEは、このコントローラーのすべてのメソッドがデフォルトでJSONを返すことを示しています。 必要に応じて、特定のメソッドでこの値をオーバーライドできます。
伝統的に、私たちは連絡先のリストから始めます。 古いメソッドは次のようになります。
  @RequestMapping("/index") public String listContacts(Map<String, Object> map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return "contact"; } 

各メソッドに対して独自のDTOを作成しないために、返されるJSONの構造はMapであることに同意します。 メソッドパラメータを削除します。必要はありません。戻り値の型をMapに変更し、戻り値に@ResponseBodyアノテーションを追加します。 彼女は、この値をJSONでシリアル化し、応答本文に書き込むことをSpringに伝えます。 新しいメソッドは次のようになります。
  @RequestMapping(value = "/index") @ResponseBody public Map<String, Object> listContacts() { Map<String, Object> map = new HashMap<String, Object>(); map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } 


問題を脇に置かず、私たちの努力の成果をすぐに見るために、計画から少し離れて、すぐにこの方法をテストしようとします。

2.1最初の試験方法

しかし、テストで期待される結果を正確に理解することが重要です。 新しいクラスMockMvcWsTest.groovyを作成し、 MockMvcWsTest.groovyに関連するすべての主要なスタッフィングをコピーします。 そして、古いテストをコピーします。
  @Test public void index_user1() { mockMvc.perform(MockMvcRequestBuilders.get("/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andExpect(MockMvcResultMatchers.view().name("contact")) .andExpect(MockMvcResultMatchers.model().attributeExists("contact")) .andExpect(MockMvcResultMatchers.model().attributeExists("contactList")) .andExpect(MockMvcResultMatchers.model().attributeExists("contactTypeList")) } 

すべてのデータはモデルに含まれています。 しかし、Webサービスでは、リクエスト本文でそれらを転送します。 たぶん彼らを探す価値があるのでしょうか? やってみましょう。
  @Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andReturn() //      -   JSON println result.response.contentAsString } 

始めます。 テストは完了しましたが、コンソールには何もありません。 うん 取引を行い、コントローラーにブレークポイントを設定して実行する必要があります。 ええ、それはコントローラーに入ります。 しかし、何か役に立つものは戻ってきません。 結果の値を確認します。 HttpMediaTypeNotAcceptableExceptionresolvedExceptionにはHttpMediaTypeNotAcceptableExceptionがあり、 mockResponse.status = 406です。診断はまだ「受け入れられる表現が見つかりませんでした」と残念です。

しかし、一方で、MapをJSONに変換するように依頼しましたが、だれがどのようにそれを行うかについては言いませんでした。 もちろん、春は多くのことができますが、すべてではありません。 ドキュメント調べると、次の結果が得られます。

確かに、2つの構成が存在することは間違いなく不便を引き起こし始めていますが、今のところこれに気を取られることはありません。 テストを開始すると、目的の行が表示されます。 しかし...キリル文字の代わりにkrakozyably。
 {"contactTypeList":[{"id":1,"code":"family","name":"Ð¡ÐµÐ¼ÑŒÑ ","defaulttype":false,"contacts":null},{"id":2,"code":"job","name":"Работа","defaulttype":false,"contacts":null},{"id":3,"code":"stuff","name":"Знакомые","defaulttype":true,"contacts":null}],"contactList":[],"contact":{"id":null,"firstname":null,"lastname":null,"email":null,"telephone":null,"contacttype":null}} 

再びグーグル、スモークのマニュアル、ソースコードを見つけて、この解決策を見つけてください:@ RequestMapping.producesにcharsetを追加します(クラスレベルのものに)。
 @RequestMapping(value = "/ws", produces = MediaType.APPLICATION_JSON_VALUE+";charset=UTF-8" ) 

それは噴水のようには見えません。希望する人は「もっと違う」オプションを探すことができます。そこで停止します。

さらにいくつかのコメント

備考1.andDo(MockMvcResultHandlers.print())コンストラクトを使用すると、テスト内で何が行われているかを理解しやすくなり、ログに詳細情報が表示されます。 たとえば、リクエストの場合、ログは次のようになります。
 MockHttpServletRequest: HTTP Method = GET Request URI = /ws/index Parameters = {} Headers = {} Handler: Type = net.schastny.contactmanager.web.ContactWsController Method = public java.util.Map<java.lang.String, java.lang.Object> net.schastny.contactmanager.web.ContactWsController.listContacts() Async: Was async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: MockHttpServletResponse: Status = 200 Error message = null Headers = {Content-Type=[application/json;charset=UTF-8]} Content type = application/json;charset=UTF-8 Body = {"contactTypeList":[{"id":1,"code":"family","name":"","defaulttype":false,"contacts":null},{"id":2,"code":"job","name":"","defaulttype":false,"contacts":null},{"id":3,"code":"stuff","name":"","defaulttype":true,"contacts":null}],"contactList":[],"contact":{"id":null,"firstname":null,"lastname":null,"email":null,"telephone":null,"contacttype":null}} Forwarded URL = null Redirected URL = null Cookies = [] 

はるかに良いですね。

備考2 。 ContactTypeクラスは、デフォルトですべての属性とともにJSONでシリアル化されていることがわかります。 ただし、 List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
属性のシリアルList contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
 List contacts = null  ,    -     No Session,       .   -   " "      @JsonIgnore 
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub
List contacts = null , - No Session, . - " " @JsonIgnore
@JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null

, . .
@Test public void index_user1() { def result = mockMvc.perform(MockMvcRequestBuilders.get("/ws/index") .with(SecurityRequestPostProcessors.userDetailsService(USER1))) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(result.response.contentAsString, Map.class); assert !map.contactList assert map.contactTypeList.size() == 3 }
index_admin() index_na() .

2.2
.
@RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; }
- :
Map @ResponseBody , JSON- ( @RequestBody String json ) JSON , , Map, , index
:
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public Map<String, Object> addContactWs(@RequestBody String json) { Contact contact = null; try { contact = new ObjectMapper().readValue(json, Contact.class); contactService.addContact(contact); Map<String, Object> map = new HashMap<String, Object>(); map.put("status", " "); // - - map.put("contact", contact); map.put("contactList", contactService.listContact()); map.put("contactTypeList", contactService.listContactType()); return map; } catch (IOException e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("status", ""); map.put("message", e.getMessage()); return map; } }
@RequestMapping consumes = MediaType.TEXT_PLAIN_VALUE , "". - status, . . JSON. Jackson ObjectMapper(), Groovy JSON-builder, Groovy 1.8. JSON , contentType . :
@Test public void add_user1() { def contacts = contactService.listContact() assert !contacts def contactTypes = contactService.listContactType() assert contactTypes // Groovy JSON-builder def jsonBuilder = new JsonBuilder() jsonBuilder { firstname '' lastname '' email 'ivan.ivanov@gmail.com' telephone '555-1234' contacttype ( id : contactTypes[0].id ) } String json = jsonBuilder.toString() MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/ws/add") .contentType(MediaType.TEXT_PLAIN) .content(json) .with(SecurityRequestPostProcessors.userDetailsService(user)) MvcResult ret = mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.content().contentType("${MediaType.APPLICATION_JSON_VALUE};charset=UTF-8")) .andDo(MockMvcResultHandlers.print()) .andReturn() def map = new ObjectMapper().readValue(ret.response.contentAsString, Map.class); assert map.status == ' ' assert map.contactList assert map.contactTypeList contacts = contactService.listContact() assert contacts assert contacts[0].id // Contact contact = new Contact(map.contact) assert contact.class == Contact.class assert contact.id == contacts[0].id assert contact.firstname == '' assert contact.lastname== '' assert contact.email == 'ivan.ivanov@gmail.com' assert contact.telephone == '555-1234' assert contact.contacttype.id == contactTypes[0].id contactService.removeContact(contacts[0].id) }
user1, . JSON, 401 .
@Test public void add_na() { ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post("/ws/add") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.TEXT_PLAIN) .characterEncoding("UTF-8") .content('{"J":5,"0":"N"}') //.with(SecurityRequestPostProcessors.userDetailsService(ADMIN)) ) result.andExpect(MockMvcResultMatchers.status().isUnauthorized()) }

, REST- . - . Basic Authentication , . HTTPS - .

.

GitHub

Source: https://habr.com/ru/post/J173593/


All Articles