我试图构建一个前端和后端分离的系统,并通过基于用户令牌的授权rest调用进行交互。前端和后端应用程序都构建在SpringBoot上。Thymeleaf用作呈现html页面的模板引擎。
<form id="doctorDetailsId" enctype="multipart/form-data">
<input name="firstName" placeholder="first name"/>
Profile pic: <input name="photo" type="file"/>
<input name="username" placeholder="user name"/>
<input name="password" placeholder="password"/>
<button type="submit">Submit</button>
</form>
$("#doctorDetailsId").ajaxForm({
url: '/doctor/add',
type: 'post',
processData: false,
success: function (data) {
console.log("Added Doctor! data = " + JSON.stringify(data))
}
})
@RequestMapping(value = URLConstants.DOCTOR + "/add", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> addDoctor(MultipartHttpServletRequest request, HttpServletResponse response) throws Exception {
String token = (String) request.getSession().getAttribute("token");
String role = (String) request.getSession().getAttribute("userRole");
if (token != null && !token.isEmpty()) {
if (role.equals(UserRole.ADMIN.getDescription())) {
String username = request.getParameter("username");
String password = request.getParameter("password");
String firstName = request.getParameter("firstName");
MultipartFile multipartFile1 = request.getFile("photo");
// Part file = request.getPart("photo");
DoctorCO doctorCO = new DoctorCO(firstName, multipartFile1);
.
.
.
String url = backendServerUrl + ":" + backendServerPort + BackApis.ADD_DOCTOR;
//RequestResponseDTO requestResponseDTO = HttpUtils.postData(url,
token, RequestMethod.POST.toString(), doctorCO);
RequestResponseDTO requestResponseDTO = HttpUtils.postDataWithoutJsonSerialising(url,
token, RequestMethod.POST.toString(), doctorCO);
DoctorDto doctorDto = objectMapper.convertValue(requestResponseDTO.getData(), DoctorDto.class);
.
.
return doctorDto;
} else {
return null;
}
}
return null;
}
public String toJson(Object o) {
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
if (o == null) {
return null;
}
try {
return mapper.writeValueAsString(o);
} catch (Exception e) {
logger.error(JacksonUtils.class.getSimpleName(), e);
throw new RuntimeException(e);
}
}
public static byte[] serialize(Object obj) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(out);
os.writeObject(obj);
return out.toByteArray();
}
java.io.NotSerializableException: org.apache.catalina.core.ApplicationPart
当我尝试使用toJson方法时,另一个异常与stackOverflow错误(无限递归)有关
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
2016-12-21 20:23:11.493 ERROR 25797 --- [nio-8082-exec-1] com.src.main.utils.JacksonUtils : JacksonUtils
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]-.....>java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileOutputStream["fd"]->java.io.FileDescriptor["parent"])
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:706) ~[jackson-databind-2.8.1.jar:2.8.1]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.1.jar:2.8.1]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:693) ~[jackson-databind-2.8.1.jar:2.8.1]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.1.jar:2.8.1]
.
.
.
.
我一直在寻找一个解决方案,以序列化文件从前端服务器到后端服务器相当长的时间。请让我知道这里出了什么问题,或者如果有人有更好的解决方案以这种方式上传文件,请让我知道。如果需要,我很乐意提供更多的细节。
我试图避免序列化Part或MultipartFile对象。我将MultipartFile对象转换为File对象。序列化没有出现任何类似的错误。
MultipartFile multipartFile1 = request.getFile("photo");
File imageFile = jacksonUtils.getFileOfMultipartFile(multipartFile1);
(以下片段取自此处)
public File getFileOfMultipartFile(MultipartFile multipartFile) throws IOException {
File convFile = new File(multipartFile.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(multipartFile.getBytes());
fos.close();
return convFile;
}
前端如何把图片上传到服务端? 使用技术:vue2 + elementUI 背景: 前端和后端分别部署到不同的服务器上,前端页面是个表单, 表单里面有上传图片的功能,上传的图片然后在其他页面展示的业务逻辑。后台提供的表单接口要求我只把图片名字(xxxx.png/xxx.jpg)传给他。 问题: 我把生产包放到nginx里的html文件夹后测试。发现没法上传。nginx的配置也做过修改了 vue: n
我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s
我怎么给鲍勃发信息?
问题内容: 我应该为“ .thrift”文件定义哪种服务,以便以后将其用于我的程序? 此文件传输应该在客户端和服务器之间,并且应该是“部分”。 StreamFileService.thrift: StreamFileClient.java: } StreamFileServer.java: } StreamFileServiceImpl: } 问题答案: 您的代码对我来说似乎还不错(未经测试),没
问题内容: 由于我是Web服务的新手,请您告诉我问题的答案。我的问题是 我想实现一个Web服务,当客户端调用此Web服务时,该服务会向客户端发送pdf文件。 请有人帮我提供一段不错的代码或解释。 现在可以请一个人解决我的错误。 12-23 09:42:48.429:调试/安装(32):DexInv:-开始’/data/app/vmdl33143.tmp’— 12-23 09:42:51.708:调
问题内容: 我想将一些文件上传到HTTP服务器。基本上,我需要的是对服务器的某种POST请求,其中包含一些参数和文件。我看到了仅上传文件的示例,但没有找到如何也传递其他参数的示例。 什么是最简单,免费的解决方案?有人有我可以学习的文件上传示例吗?我已经搜寻了几个小时,但是(也许只是那几天)找不到我真正需要的东西。最好的解决方案是不涉及任何第三方类或库的东西。 问题答案: 通常,你会用来触发HTTP