mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	Fix empty-parameter issue in updateUserSettings by using @RequestBody map (#3536)
				
					
				
			# Description of Changes Please provide a summary of the changes, including: - **What was changed:** - Refactored the `updateUserSettings` method in `UserController` to accept a `@RequestBody Map<String, String>` named `updates` instead of pulling parameters from `HttpServletRequest`. - Removed the now-unused `HashMap` import and the manual parameter-extraction loop. - **Why the change was made:** - **Bug Fix:** The previous implementation relied on `request.getParameterMap()`, which was consistently empty, so no settings were ever applied. - Simplifies controller logic by leveraging Spring’s request-body binding. - Improves readability and maintainability, removing boilerplate and error-prone code. --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									e6a9e7a584
								
							
						
					
					
						commit
						523240554f
					
				@ -3,7 +3,6 @@ package stirling.software.SPDF.controller.api;
 | 
				
			|||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.security.Principal;
 | 
					import java.security.Principal;
 | 
				
			||||||
import java.sql.SQLException;
 | 
					import java.sql.SQLException;
 | 
				
			||||||
import java.util.HashMap;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Optional;
 | 
					import java.util.Optional;
 | 
				
			||||||
@ -168,13 +167,23 @@ public class UserController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
 | 
					    @PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
 | 
				
			||||||
    @PostMapping("/updateUserSettings")
 | 
					    @PostMapping("/updateUserSettings")
 | 
				
			||||||
    public String updateUserSettings(HttpServletRequest request, Principal principal)
 | 
					    /**
 | 
				
			||||||
 | 
					     * Updates the user settings based on the provided JSON payload.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param updates A map containing the settings to update. The expected structure is:
 | 
				
			||||||
 | 
					     *                <ul>
 | 
				
			||||||
 | 
					     *                  <li><b>emailNotifications</b> (optional): "true" or "false" - Enable or disable email notifications.</li>
 | 
				
			||||||
 | 
					     *                  <li><b>theme</b> (optional): "light" or "dark" - Set the user's preferred theme.</li>
 | 
				
			||||||
 | 
					     *                  <li><b>language</b> (optional): A string representing the preferred language (e.g., "en", "fr").</li>
 | 
				
			||||||
 | 
					     *                </ul>
 | 
				
			||||||
 | 
					     *                Keys not listed above will be ignored.
 | 
				
			||||||
 | 
					     * @param principal The currently authenticated user.
 | 
				
			||||||
 | 
					     * @return A redirect string to the account page after updating the settings.
 | 
				
			||||||
 | 
					     * @throws SQLException If a database error occurs.
 | 
				
			||||||
 | 
					     * @throws UnsupportedProviderException If the operation is not supported for the user's provider.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public String updateUserSettings(@RequestBody Map<String, String> updates, Principal principal)
 | 
				
			||||||
            throws SQLException, UnsupportedProviderException {
 | 
					            throws SQLException, UnsupportedProviderException {
 | 
				
			||||||
        Map<String, String[]> paramMap = request.getParameterMap();
 | 
					 | 
				
			||||||
        Map<String, String> updates = new HashMap<>();
 | 
					 | 
				
			||||||
        for (Map.Entry<String, String[]> entry : paramMap.entrySet()) {
 | 
					 | 
				
			||||||
            updates.put(entry.getKey(), entry.getValue()[0]);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        log.debug("Processed updates: {}", updates);
 | 
					        log.debug("Processed updates: {}", updates);
 | 
				
			||||||
        // Assuming you have a method in userService to update the settings for a user
 | 
					        // Assuming you have a method in userService to update the settings for a user
 | 
				
			||||||
        userService.updateUserSettings(principal.getName(), updates);
 | 
					        userService.updateUserSettings(principal.getName(), updates);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user