有到github的链接:https://github.com/lukszn/projectprofile 我使用的是spring4.3.7.release、mysql连接器java:5.1.39和hibrnate:5.2.9。最后,我有用户和他的帐户模型。帐户中有@lob accpicture和一些字符串(+get/set)。我试图从stackoverflow和文档中找到很多答案来显示帐户图像,但没有成功。最后想想我做了什么:创建了自己的imagecontroller。我成功地将图像存储在数据库中,但当我尝试在jsp中显示它时,它显示“http状态400-客户端发送的请求语法不正确”。首先,我向您显示我的用户模型:
@Entity
@Table(name = "users")
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true)
@NotBlank
@Size(min=4,max=20)
private String login;
@NotBlank
private String password;
@Column(unique = true)
@Email
@NotBlank
private String email;
private String permission;
@OneToMany()
private List<Account> accounts;
public User(final String login, final String password, final String email) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(login));
Preconditions.checkArgument(!Strings.isNullOrEmpty(password));
Preconditions.checkArgument(!Strings.isNullOrEmpty(email));
this.login = login;
this.password = password;
this.email = email;
}
public User() {
}
}
+ get/set
客户模型:
@Entity
@Table(name = "accounts")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private boolean ifBasicAccount;
private String accTitle;
private String accFirstName;
private String accLastName;
private String accBirthdate;
private String accPhoneNumber;
private String accEducation;
private String accExperience;
private String accAbilities;
private String accInterests;
private String accProjects;
private String accDescription;
@Lob
private byte[] accPicture;
@ManyToOne
private User user;
public Account() {
}
+ get/set
下一个帐户控制器:
@Controller
public class AccountController {
@Autowired
AccountRepository accountRepository;
@Autowired
UserRepository userRepository;
@RequestMapping(method = RequestMethod.GET, value ="addAccount")
public String addAccount(Model model) {
Account account = new Account();
model.addAttribute("account", account);
return "addAccount";
}
@RequestMapping(method = RequestMethod.POST, value ="addAccount")
public String addAccount(@ModelAttribute Account account, HttpSession session) {
User user = userRepository.findOne((Long) session.getAttribute("user_id"));
account.setIfBasicAccount(false);
account.setUser(user);
accountRepository.save(account);
return "redirect:/accounts";
}
@RequestMapping("/accounts")
public String accountList(Model model, HttpSession ses) {
long userId = (Long) ses.getAttribute("user_id");
List<Account> accounts = accountRepository.findUserAccounts(userId);
model.addAttribute("accounts", accounts);
return "accounts";
}
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public String editAccountForm(Model model, @PathVariable long id) {
Account account = accountRepository.findOne(id);
model.addAttribute("account",account);
return "editAccountForm";
}
@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
public String editAccount(@ModelAttribute Account account, @PathVariable long id) {
Account accountToUpdate = accountRepository.findOne(id);
accountToUpdate.setAccTitle(account.getAccTitle());
accountToUpdate.setAccFirstName(account.getAccFirstName());
accountToUpdate.setAccLastName(account.getAccLastName());
accountToUpdate.setAccBirthdate(account.getAccBirthdate());
accountToUpdate.setAccPhoneNumber(account.getAccPhoneNumber());
accountToUpdate.setAccEducation(account.getAccEducation());
accountToUpdate.setAccExperience(account.getAccExperience());
accountToUpdate.setAccAbilities(account.getAccAbilities());
accountToUpdate.setAccInterests(account.getAccInterests());
accountToUpdate.setAccProjects(account.getAccProjects());
accountToUpdate.setAccDescription(account.getAccDescription());
accountRepository.save(accountToUpdate);
return "redirect:/accounts";
}
@RequestMapping("/delete")
public String deleteAccount(Model model) {
return "deleteAccount";
}
@RequestMapping("/read/{id}")
public String read(@PathVariable long id) {
return accountRepository.findOne(id).toString();
}
@RequestMapping("/delete/{id}")
public String delete(@PathVariable long id) {
Account account = accountRepository.findOne(id);
accountRepository.delete(account);
return "redirect:/accounts";
}
}
最后一个图像控制器:
@Controller
@RequestMapping("/user")
public class ImageController {
private AccountRepository accountRepository;
@RequestMapping(value = "/accounts", method = RequestMethod.GET)
public void showImage(@RequestParam("id") Long id, HttpServletResponse response, HttpServletRequest request)
throws ServletException, IOException {
Account account = accountRepository.getOne(id);
response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
response.getOutputStream().write(account.getAccPicture());
response.getOutputStream().close();
}
}
显示帐户的my.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<%@ page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ include file="/WEB-INF/parts/header.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<table class="table table-striped">
<h1>Accounts:</h1>
<c:forEach items="${accounts}" var="account" begin="0" varStatus="theCount">
<tr>
<td>${theCount.index+1}</td>
<td><b>Nazwa: </b>${account.accTitle}</td>
<td><b>Opis: </b>${account.accDescription}</td>
<td><img src="/ProjectProfile/user/accounts?id=${account.id}"/></td>
<td><a style="width: 180px;height: 20px;" href="./edit/${account.id}" class="badge badge-primary">Show/Edit</a></td>
<td><a style="width: 180px;height: 20px;" href="./delete/${account.id}" class="badge badge-danger">Delete</a></td>
</tr>
</c:forEach>
</table>
<a href="<c:url value="/addAccount"/>">Add Account</a>
</body>
</html>
也许我需要用Base64编码器,但我不知道怎么用。。。。我使用pom.xml和appconfig进行配置。拜托,看看这个项目,也许有人能帮上忙?
3条答案
按热度按时间gev0vcfq1#
好吧,尤尼托,让我看看。。。已更改的account.java(模型):
我有两个控制器(一个仅用于显示图像-我不太确定这是件好事,因为我有两个相同的请求Map)。因此,请参见更改的imagecontroller:
和.jsp来显示图像:
当我添加新帐户->写标题,名字等,从我的浏览器显示的文件中添加图像时,会发生什么
HTTP Status 400 - The request sent by the client was syntactically incorrect.
->我需要查看所有用户帐户。在sts控制台里什么也没发生。在mysql中也是如此。41ik7eoe2#
为什么不使用spring内容jpa呢?这可以提供存储服务和rest端点,用于管理与jpa实体关联的内容。
pom.xml文件
配置
要关联内容,请向帐户实体添加spring内容注解。
帐户.java
创建“商店”:
accountimagesstore.java文件
这就是创建rest端点所需的全部@
/accountImages
. 当您的应用程序启动时,spring内容将查看您的依赖项(查看spring内容jpa/rest),查看您的AccountImagesStore
接口并为jpa注入该接口的实现。它还将注入@Controller
将http请求转发给该实现。这就省得你自己去实现我认为你所追求的。所以。。。
curl -X POST /accountImages/{account-id}
对于多部分/表单,数据请求将图像存储在数据库中,并将其与id为的帐户实体相关联account-id
.curl /accountImages/{account-id}
将再次获取它等等…支持完全积垢。因此,您只需在jsp中显示一个图像标记:
这里有一些入门指南。参考指南在这里。这里有一个教程视频。编码位大约从1/2开始。
hth公司
kknvjkwl3#
在负责将图像发送到html的控制器中:
我还在模型中使用此方法将byte[]转换为base64中的字符串:
我在模型内部的getstringphoto()getter中调用它。