我的 spring-boot 服务的前端在第 3 方仪表板中呈现。该仪表板还有一个我们想要使用的通用搜索栏。现在,一旦我们实现了 Keycloak 身份验证,我们就开始面临这个搜索栏中的问题。所有其他 API 都工作正常,因为它们仅从我的前端调用,但搜索 API 由第 3 方仪表板调用。
奇怪的是,第 3 方使用 Http OPTION 方法调用我的方法,但我的端点注册为 GET。
对于临时修复,我们尝试仅禁用搜索 API 上的身份验证,但似乎根本不起作用。我的配置器是:
@KeycloakConfiguration
@Profile("!local") // in local profile InsecureLocalConfigurer must be included instead
public class KeycloakSecurityConfigurer extends KeycloakWebSecurityConfigurerAdapter {
/**
* Enable Keycloak configuration over Spring Boot config instead of {@code keycloak.json} file.
*
* @see <a href="https://www.keycloak.org/docs/latest/securing_apps/index.html#spring-boot-integration">
* Spring Boot Integration</a>
*/
@Bean
@Nonnull
public KeycloakConfigResolver keycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
/**
* Registers the KeycloakAuthenticationProvider with …Run Code Online (Sandbox Code Playgroud) authentication spring-security spring-boot keycloak spring-rest
我打算开始学习Spring,但是当我打开任何弹簧教程时,我发现很多模块,比如Spring REST,spring MVC等.
我真的很困惑如何从春天开始,从哪个模块开始,这些模块如何相互关联,我应该通过所有模块?
我试着搜索很多网站来回答我的问题,但找不到满意的答案,所以想到在这里发帖.如果有人能在这方面指导我,那将是很棒的.
我正在获取存储在 DB 中的 JSON(JSON 作为字符串存储在 DB 中)并将其添加到控制器中的模型对象中。
@RequestMapping( method = RequestMethod.GET, value = "/all" )
public void getJson(HttpServletRequest httpServletRequest, Model model){
String json = serviceDao.getResponseJson();
System.out.println(json); //Output: {"Response":[{"Id":"1","Name":"GAD"},{"Id":"2","Name":"GBD"}],"Status":"Success"}
model.addAttribute("result",json);
}
Run Code Online (Sandbox Code Playgroud)
但是当我从浏览器调用服务时,响应中添加了转义字符。
http://localhost:8080/MyApplication/all.json
{"result":"{\"Response\":[{\"Id\":\"1\",\"Name\":\"GAD\"},{\"Id\":\"2 \",\"名称\":\"GBD\"}],\"状态\":\"成功\"}"}
您能否帮助我在没有转义字符的情况下将 JSON 对象发送到 Web 服务中的客户端。
我正在练习 MockMVC 进行休息呼叫单元测试。我们如何测试布尔值以便结果是 true 还是 false 我需要通过测试,我尝试如下,
mockMvc.perform(get("/student/{Id}", 1L)).
.andExpect(status().isOk())
.andExpect(jsonPath("$.isPass", is(true || false)));
Run Code Online (Sandbox Code Playgroud)
我还有包含 6 个值的列表,如何使用包含各种方法的列表,
.andExpect(jsonPath("$.subjectList", hasSize(5)))
.andExpect(jsonPath("$.subjectList.name", Matchers.contains("English", "Hindi", "France", "Tamil", "Bengali"))
Run Code Online (Sandbox Code Playgroud)
有什么建议请!!
我有一个如下所示的异常类
@ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Unprocessable Entity") // 422
public class UnprocessableEntityException extends RuntimeException {
}
Run Code Online (Sandbox Code Playgroud)
现在状态不会返回为 422,除非我在 Controller 类中编写了一个特定的处理程序,例如:
@ExceptionHandler(UnprocessableEntityException.class)
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public String handleException(Exception ex) {
...
}
Run Code Online (Sandbox Code Playgroud)
据我了解,我首先不需要@ExceptionHandler,不确定我错过了什么。
我目前有这个RequestMapping,我通过正则表达式使用验证:
@RequestMapping(value = "/example/{id}", method = GET)
public Response getExample(
@PathVariable("id") String id,
@RequestParam(value = "myParam", required = true) @Valid @Pattern(regexp = MY_REGEX) String myParamRequest,
@RequestParam(value = "callback", required = false) String callback,
@RequestHeader(value = "X-API-Key", required = true) @Valid @Pattern(regexp = SEGMENTS_REGEX) String apiKeyHeader) {
// Stuff here...
}
Run Code Online (Sandbox Code Playgroud)
然而,正则表达是不够的.相反,我想对header属性进行一些自定义验证,即
if (!API_KEY_LIST.contains(apiKeyHeader)) {
throw Exception();
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我绝对没有找到完全自动进行部分更新的明确方法(可以通过比较数据库和部分对象中的逐字段对象来实现)。
我看到了一些类似的曲目:
MapperServiceheavyResourceRepository哪种save(Map<String, Object> updates, String id)方法的存储库类型是什么copyProperty方法谢谢您,可以使用PATCH方法,但是我看不到实现它的明确方法。
在我的春季启动服务中,我使用https://github.com/java-json-tools/json-patch来处理PATCH请求.
一切似乎是确定除的方式来避免修改状物品ID的,CREATION_TIME等不可改变的领域我都发现了类似的问题在Github https://github.com/java-json-tools/json-patch/issues/21为我找不到合适的例子.
这个博客似乎提供了一些有趣的解决方案,用于在node.js中使用解决方案来验证JSON补丁请求.很高兴知道JAVA中是否有类似的东西.
所以我目前遇到的问题是我得到了一个
servlet [dispatcherServlet]的Servlet.service()与path []的上下文引发了异常[请求处理失败; 嵌套异常是org.springframework.web.client.HttpClientErrorException:404 null],其根本原因是org.springframework.web.client.HttpClientErrorException 404 null
在我的客户端代码中,当我的服务器代码响应除OK 200响应以外的任何内容时.所以在这种情况下,我故意在我的服务器代码中返回一个404响应,使用标题和正文,没有标题和正文,但我仍然得到与我在服务器代码中响应的HTTP状态代码相同的异常null在这种情况下,我假设是响应的主体.最初在我的服务器代码中我总是返回一个ResponseEntity<>("Sent", HttpStatus.OK)但是因为在我的服务器代码中我在其他地方发出了HTTP请求,如果这个响应除了200 OK以外我的客户端代码不会知道它因此而是我返回实际的响应返回从我的服务器代码中的HTTP请求回到我的客户端代码,这是我遇到这个问题.
客户代码
public String callFruitBasket(Fruit fruitRequest) {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Fruit> fruit = new HttpEntity<>(fruitRequest, requestHeaders);
System.out.println("Fruit headers: " + fruit.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(fruitBasketUrl, HttpMethod.POST, fruit, String.class);
System.out.println("Full response: " + response);
return response.getBody();
}
Run Code Online (Sandbox Code Playgroud)
服务器代码
@PostMapping("/fruitBasket/send")
public ResponseEntity<String> sendFruitBasket(@RequestBody Fruit fruit) {
// works fine, old response
// return new ResponseEntity<>("Sent", HttpStatus.OK);
return new ResponseEntity<>("Baaad Request", HttpStatus.BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)
所以目前在我的服务器代码中我没有添加任何标题到我的响应,但我已经尝试添加Content-Type但是我发现我的客户端代码中仍然有相同的异常所以我100%肯定问题出在我的客户端代码中.最初当我通过200 OK响应时,客户端代码中完整响应的打印输出正常,显示:
Full Response: …Run Code Online (Sandbox Code Playgroud) 我可以下载单个文件,但如何下载包含多个文件的 zip 文件。
下面是下载单个文件的代码,但我有多个文件要下载。任何帮助将不胜感激,因为我在过去 2 天一直坚持这一点。
@GET
@Path("/download/{fname}/{ext}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(@PathParam("fname") String fileName,@PathParam("ext") String fileExt){
File file = new File("C:/temp/"+fileName+"."+fileExt);
ResponseBuilder rb = Response.ok(file);
rb.header("Content-Disposition", "attachment; filename=" + file.getName());
Response response = rb.build();
return response;
}
Run Code Online (Sandbox Code Playgroud) spring-rest ×10
rest ×4
spring ×4
spring-boot ×4
java ×3
json ×2
hibernate ×1
http-method ×1
json-patch ×1
jsonpath ×1
junit ×1
keycloak ×1
mockmvc ×1
spring-mvc ×1
spring-web ×1
validation ×1