This is an automated email from the ASF dual-hosted git repository.

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new edc9784540 fix(admin): validate resource update requests (#6617) 
(#7170)
edc9784540 is described below

commit edc9784540951e30ea7ac2a5955ddcf060d27d97
Author: BobSong <[email protected]>
AuthorDate: Wed Sep 30 09:58:49 2026 +0800

    fix(admin): validate resource update requests (#6617) (#7170)
    
    Co-authored-by: BobSong-dev <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../admin/controller/ResourceController.java       |  2 +-
 .../admin/controller/ResourceControllerTest.java   | 24 +++++++++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java
index 1875121418..88e00a2ae2 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/ResourceController.java
@@ -149,7 +149,7 @@ public class ResourceController {
     public ShenyuAdminResult updateResource(@PathVariable("id") @Valid
                                             @Existed(provider = 
ResourceMapper.class,
                                                     message = "resource not 
existed") final String id,
-                                            @RequestBody final ResourceDTO 
resourceDTO) {
+                                            @Valid @RequestBody final 
ResourceDTO resourceDTO) {
         resourceDTO.setId(id);
         return ShenyuAdminResult.success(ShenyuResultMessage.UPDATE_SUCCESS, 
resourceService.update(resourceDTO));
     }
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ResourceControllerTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ResourceControllerTest.java
index 0b520c8eae..94745832be 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ResourceControllerTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/ResourceControllerTest.java
@@ -21,7 +21,11 @@ import static com.google.common.collect.Lists.newArrayList;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
 import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 import org.apache.shenyu.admin.exception.ExceptionHandlers;
 import org.apache.shenyu.admin.mapper.ResourceMapper;
@@ -37,6 +41,7 @@ import org.apache.shenyu.admin.service.ResourceService;
 import org.apache.shenyu.admin.spring.SpringBeanUtils;
 import org.apache.shenyu.admin.utils.ShenyuResultMessage;
 import org.apache.shenyu.common.utils.GsonUtils;
+import org.hamcrest.Matchers;
 
 import java.util.Collections;
 import java.util.List;
@@ -191,7 +196,10 @@ public class ResourceControllerTest {
         final ResourceDTO resourceDTO = new ResourceDTO();
         resourceDTO.setId(mockId);
         fill(resourceDTO);
-        
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
+        final ConfigurableApplicationContext applicationContext = 
mock(ConfigurableApplicationContext.class);
+        
given(applicationContext.getBean(ResourceMapper.class)).willReturn(resourceMapper);
+        given(resourceMapper.existed(mockId)).willReturn(true);
+        
SpringBeanUtils.getInstance().setApplicationContext(applicationContext);
         given(resourceService.update(resourceDTO)).willReturn(1);
 
         this.mockMvc.perform(MockMvcRequestBuilders.put("/resource/" + mockId)
@@ -200,6 +208,20 @@ public class ResourceControllerTest {
                 
.andExpect(content().json(GsonUtils.getInstance().toJson(ShenyuAdminResult.success(ShenyuResultMessage.UPDATE_SUCCESS,
 1))))
                 .andReturn();
     }
+
+    @Test
+    public void testUpdateResourceRejectsInvalidBody() throws Exception {
+        final String mockId = "mock-id";
+
+        this.mockMvc.perform(MockMvcRequestBuilders.put("/resource/" + mockId)
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(GsonUtils.getInstance().toJson(new 
ResourceDTO())))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.message", 
Matchers.containsString("Request error! invalid argument")))
+                .andReturn();
+
+        verify(resourceService, never()).update(any());
+    }
     
     @Test
     public void testDeleteResource() throws Exception {

Reply via email to