《Spring实战》摘录 - 13

in #ievolution6 years ago

19-04-07-c0.jpg


121

Q: #7.2.1-4 | 与StandardServletMultipartResolver有所不同,CommonsMultipart-Resolver会不会强制要求设置临时文件路径
A: 不会


122

Q: #7.2.1-5 | 如下的配置就等价于我们在前文通过MultipartConfigElement所配置的StandardServletMultipartResolver
A:

@Bean
public MultipartResolver multipartResolver() throws IOException {
  CommonsMultipartResolver multipartResolver =
          new CommonsMultipartResolver();
  multipartResolver.setUploadTempDir(
      new FileSystemResource("/tmp/spittr/uploads"));
  multipartResolver.setMaxUploadSize(2097152);
  multipartResolver.setMaxInMemorySize(0);
  return multipartResolver;
}


123

Q: #7.2.2-1 | 想一下,对于提交的图片数据我们都了解哪些信息呢。或者,更为重要的是,我们还不知道些什么呢?
A:
尽管我们已经得到了byte数组形式的图片数据,并且根据它能够得到图片的大小,但是对于其他内容我们就一无所知了。我们不知道文件的类型是什么,甚至不知道原始的文件名是什么。你需要判断如何将byte数组转换为可存储的文件


124

Q: #7.2.2-2 | Spring所提供的MultipartFile接口,用来处理上传的文件
A:

package org.springframework.web.multipart;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public interface MultipartFile {
  String getName();
  String getOriginalFilename();
  String getContentType();
  boolean isEmpty();
  long getSize();
  byte[] getBytes() throws IOException;
  InputStream getInputStream() throws IOException;
  void transferTo(File dest) throws IOException;
}


125

Q: #7.2.2-3 | 除此之外,MultipartFile还提供了一个便利的transferTo()方法,它能够帮助我们将上传的文件写入到文件系统中。作为样例,我们可以在process-Registration()方法中添加如下的几行代码,从而将上传的图片文件写入到文件系统中。代码是什么?、
A:

profilePicture.transferTo(new File("/data/spittr/" + profilePicture.getOriginalFilename()));


126

Q: #7.2.2-4 | Part接口:Spring MultipartFile的替代方案。Part接口内部是什么?
A:

package javax.servlet.http;
import java.io.*;
import java.util.*;

public interface Part {
  public InputStream getInputStream() throws IOException;
  public String getContentType();
  public String getName();
  public String getSubmittedFileName();
  public long getSize();
  public void write(String fileName) throws IOException;
  public void delete() throws IOException;
  public String getHeader(String name);
  public Collection<String> getHeaders(String name);
  public Collection<String> getHeaderNames();
}


127

Q: #7.2.2-5 | Part方法与MultipartFile,中比较类似,但是稍有差异的地方,请举出2例
A:
有一些比较类似,但是稍有差异

  • 比如getSubmittedFileName()对应于getOriginalFilename()。
  • 类似地,write()对应于transferTo(),借助该方法我们能够将上传的文件写入文件系统中。


128

Q: #7.3-1 | Spring提供了3种方式将异常转换为响应
A:

  • 特定的Spring异常将会自动映射为指定的HTTP状态码;
  • 异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码;
  • 在方法上可以添加@ExceptionHandler注解,使其用来处理异常。


129

Q: #7.3.1-1 | Spring的一些异常会默认映射为HTTP状态码
A:

  • BindException --- 400 - Bad Request
  • ConversionNotSupportedException --- 500 - Internal Server Error
  • HttpMediaTypeNotAcceptableException --- 406 - Not Acceptable
  • HttpMediaTypeNotSupportedException --- 415 - Unsupported Media Type
  • HttpMessageNotReadableException --- 400 - Bad Request
  • HttpMessageNotWritableException --- 500 - Internal Server Error
  • HttpRequestMethodNotSupportedException --- 405 - Method Not Allowed
  • MethodArgumentNotValidException --- 400 - Bad Request
  • MissingServletRequestParameterException --- 400 - Bad Request
  • MissingServletRequestPartException --- 400 - Bad Request
  • NoSuchRequestHandlingMethodException --- 404 - Not Found
  • TypeMismatchException --- 400 - Bad Request


130

Q: #7.3.1-2 | @ResponseStatus注解:将异常映射为特定的状态码
A:

package spittr.web;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RespinseStatus;

@RespinseStatus(value=HttpStatus.NOT_FOUND, //将异常映射为HTTP状态404
                reason="Spittle Not Found")
public class SpittleNotFoundException extends RuntimeException{
    ...
}

Coin Marketplace

STEEM 0.14
TRX 0.23
JST 0.031
BTC 84230.47
ETH 2080.32
USDT 1.00
SBD 0.63