我试图用Spring Rest发送一个文件列表,但我遇到了这个例外。
无法写入内容:找不到java.io.ByteArrayInputStream
类的序列化程序
以下是我的代码的重要部分:
List<ByteArrayResource> contentsAsResource = new ArrayList<ByteArrayResource>();
for(MultipartFile fichier : fichiers) {
contentsAsResource.add(new ByteArrayResource(fichier.getBytes()) {
@Override
public String getFilename()
{
return fichier.getOriginalFilename();
}
});
};
map.add("files", contentsAsResource);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<LinkedMultiValueMap<String, Object>>(map, headers);
FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
formConverter.setMultipartCharset(Charset.forName("UTF8"));
formConverter.addPartConverter(new MappingJackson2HttpMessageConverter());
this.restClientHelper.getRestTemplate().getMessageConverters().add(formConverter);
this.restClientHelper.getRestTemplate().postForObject("file/save", requestEntity, Object.class);
我尝试了以下方法,但没有成功:
for (MultipartFile fichier : fichiers) {
map.add("files", new ByteArrayResource(fichier.getBytes()) {
@Override
public String getFilename()
{
return fichier.getOriginalFilename();
}
});
};
但我得到另一个异常:org.springframework.web.client.ResourceAccessException:“http://localhost:8080/myapp/ws/file/save”
的POST请求时出现I/O错误。目标服务器上启用了基本身份验证。如果我禁用了它,一切都正常了!下面是目标服务器上的spring-security配置。
<http pattern="/ws/file/**" authentication-manager-ref="basicAuthenticationManager" create-session="stateless">
<intercept-url pattern="/**" access="isAuthenticated()"/>
<http-basic />
<csrf disabled="true" />
<headers disabled="true" />
</http>
我是不是在Spring Security配置中遗漏了什么?
编辑2:标题中似乎没有标记“授权”,手动添加它可以解决问题
编辑三:问题解决!当将带有spring rest模板的multiples文件发送到启用基本身份验证的目标服务器时,需要(重新)添加基本身份令牌。这里有很好的解释:使用spring RestTemplate对REST API进行基本身份验证。我不知道是不是(Spring来的)bug。我在这次更新之前的配置(我选择了拦截器方式)是这样的:
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(login, motDePasse));
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
...
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClientBuilder.build());
this.restTemplate = new RestTemplate(requestFactory);
this.restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor(username, password));
类是:
private static class BasicAuthorizationInterceptor implements ClientHttpRequestInterceptor
{
private final String username;
private final String password;
public BasicAuthorizationInterceptor(String username, String password)
{
this.username = username;
this.password = (password == null ? "" : password);
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException
{
byte[] token = Base64.getEncoder().encode((this.username + ":" + this.password).getBytes());
request.getHeaders().add("Authorization", "Basic " + new String(token));
return execution.execute(request, body);
}
}
Spring Security配置文件中缺少身份验证提供程序。你可以试试这个代替拦截器
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="password" />
</user-service>
</authentication-provider>
</authentication-manager>
第一次使用java邮件。我正在遵循本教程,但我已经无法发送基本消息,并且我收到了一个非常奇怪的错误: 奇怪的是,我的代码中没有使用IMAP: 错误发生在最后一行(发送)。我知道smtp服务器正常工作。 有什么建议吗?为什么会发生这种情况?我该如何解决? 编辑:显然,地址/主机在这里发生了更改,我使用的是在实际代码中工作的真实地址/主机。
摘自:https://docs.microsoft.com/en-us/azure/cosmos-db/create-graph-dotnet 我在 .wait() 部分遇到异常: 代码:
我有这个jsp代码。 UserList由数据类型为“Car”的名为“car”的属性组成 用户的Pojo类: 我使用的是Spring MVC框架。在页面加载时,我的应用程序应该显示一个包含用户列表的表格。在controller中,我查询用户列表,并将其添加到ModelAndView对象中 控制器代码: 当我尝试不使用car(tabledata标记)时,JSP正在毫无例外地运行,并在表中显示用户列表。
我正试图在詹金斯设置电子邮件通知 但当我点击测试配置时,我得到了下面的错误 请参考附件截图以及下面的错误 请帮帮我,我被困在这里了。 太阳安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径 原因:sun.security.validator.验证器异常:PKIX路径构建失败 原因:javax。网ssl。SSLHandshakeExce
我下载了以下链接: http://www.java2s.com/Code/JarDownload/java/java-json.jar.zip 然后,我将jar添加到构建路径:右键单击项目 我能够使用java-json库而不会出现任何错误。然而,当我将项目导出到一个jar时,没有选项将java-json引用库作为jar的一部分。所以我假设通过将库添加到构建路径,我不必导出外部罐(无论如何也没有选项
我想创建. zip文件,其中包含我从后端收到的压缩文件,然后将此文件发送给用户。两天来,我一直在寻找答案,但找不到合适的解决方案,也许你可以帮我:) 目前,代码是这样的:(我知道我不应该在spring控制器中完成所有工作,但不关心这一点,它只是为了测试目的,以找到使其工作的方法) 但问题是,使用的代码,当我输入URL:localhost:8080/zip我得到文件:test.zip.html而不是