我想使用Spring MVC发布带有一些JSON数据的文件.所以我开发了一个休息服务
@RequestMapping(value = "/servicegenerator/wsdl", method = RequestMethod.POST,consumes = { "multipart/mixed", "multipart/form-data" })
@ResponseBody
public String generateWSDLService(@RequestPart("meta-data") WSDLInfo wsdlInfo,@RequestPart("file") MultipartFile file) throws WSDLException, IOException,
JAXBException, ParserConfigurationException, SAXException, TransformerException {
return handleWSDL(wsdlInfo,file);
}
Run Code Online (Sandbox Code Playgroud)
当我从其他客户端发送请求时
content-Type = multipart/form-data or multipart/mixed,我得到下一个异常:
org.springframework.web.multipart.support.MissingServletRequestPartException
任何人都可以帮我解决这个问题吗?
我可以使用@RequestPartMultipart和JSON发送到服务器吗?
我试图从二进制流构建一个PDF文件,我收到它作为Ajax请求的响应.
通过XmlHttpRequest我收到以下数据:
%PDF-1.4....
.....
....hole data representing the file
....
%% EOF
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试的是通过嵌入我的数据data:uri.现在,它没有任何问题,它工作正常.不幸的是,它在IE9和Firefox中不起作用.可能的原因可能是FF和IE9在使用时遇到了问题data-uri.
现在,我正在寻找适用于所有浏览器的解决方案.这是我的代码:
// responseText encoding
pdfText = $.base64.decode($.trim(pdfText));
// Now pdfText contains %PDF-1.4 ...... data...... %%EOF
var winlogicalname = "detailPDF";
var winparams = 'dependent=yes,locationbar=no,scrollbars=yes,menubar=yes,'+
'resizable,screenX=50,screenY=50,width=850,height=1050';
var htmlText = '<embed width=100% height=100%'
+ ' type="application/pdf"'
+ ' src="data:application/pdf,'
+ escape(pdfText)
+ '"></embed>';
// Open PDF in new browser window
var detailWindow = window.open ("", winlogicalname, winparams);
detailWindow.document.write(htmlText);
detailWindow.document.close();
Run Code Online (Sandbox Code Playgroud)
正如我所说,它适用于Opera和Chrome(Safari尚未经过测试).使用IE或FF将显示一个空白的新窗口.
是否有任何解决方案,如在文件系统上构建PDF文件,以便让用户下载它?我需要适用于所有浏览器的解决方案,至少在IE,FF,Opera,Chrome和Safari中.
我无权编辑Web服务实现.所以它必须是客户端的解决方案.有任何想法吗?
这是我的标记:
<a href="#" class="reviews" id="like" rel="popover" data-content="" data-placement="right" data-original-title="Like episode">
<i class="icon-thumbs-up"></i>
Loved it
</a>(<span id="episode_likes">{{ episode_likes }}</span>
Run Code Online (Sandbox Code Playgroud)
这是JavaScript:
$('a.reviews#like').click(function(e){
var element = $(this);
$.ajax({
url: '/episoderatings/like/',
type: 'POST',
dataType: 'json',
data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
episode_number: current,
story: current_story
},
success: function(response){
if(response=='You have liked this episode'){
$('span#episode_likes').text(parseInt($('span#episode_likes').text())+1);
}
$(element).attr('data-content',response);
$(element).popover();
}
});
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
问题是,当我点击"喜欢"按钮时,弹出窗口没有出现在第一次点击,所以我错过了重要的回复我是否喜欢这个页面.当我点击"喜欢"按钮时,第二次弹出窗口会出现,然后从那里开始保持其切换行为.有任何想法吗?
我有一个像这样的控制器,我想提交一个包含文件上传的表格以及一些表格数据,如下图所示.另外,我想使用@RequestBody这样做,所以我可以在包装器上使用@Valid注释,因为会添加更多变量.
public @ResponseBody WebResponse<Boolean> updateEUSettings(
final Locale locale,
@Validated @ModelAttribute final EUPSettingsWrapper endUserPortalSettingsWrapper) {
}
Run Code Online (Sandbox Code Playgroud)
我的包装是:
public class EUPSettingsWrapper {
private String label;
private MultipartFile logo;
// getter , setters..etc...
}
Run Code Online (Sandbox Code Playgroud)
但我想将它从ModelAttributes转换为@RequestBody.
我正在尝试的方法是将文件上传分隔为请求参数,如下所示:
public @ResponseBody WebResponse<Boolean> updateEUSettings(
final Locale locale,
@Validated @RequestBody final EUPSettingsWrapper endUserPortalSettingsWrapper,
@RequestParam(value = "file1", required = true) final MultipartFile logo) {
endUserPortalSettingsWrapper.setLogo(logo);
// ...
}
Run Code Online (Sandbox Code Playgroud)
在我的模拟MVC中,我正在设置:
getMockMvc().perform(fileUpload(uri).file(logo)
.accept(MediaType.APPLICATION_JSON)
.content(JSONUtils.toJSON(wrapper))
.contentType(MediaType.MULTIPART_FORM_DATA))
.andExpect(status().isOk());
Run Code Online (Sandbox Code Playgroud)
但我收到的错误是这样的:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data' not supported
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何将Multipart文件上传与@RequestBody一起使用?我上面做错了什么?
我认为我的情景很常见.我有一个数据库,我希望我的Spring MVC应用程序接受控制器中的请求,调用数据库服务来获取数据并将该数据作为CSV文件发送到客户端.我正在使用JavaCSV此处找到的库来协助此过程:http://sourceforge.net/projects/javacsv/
我发现了一些人做类似事情的例子,并拼凑出看似正确的东西.但是当我尝试这种方法时,实际上并没有发生任何事情.
我认为将数据写入HttpServletResponse'outputStream就足够了,但显然,我遗漏了一些东西.
这是我的控制器代码:
@RequestMapping(value="/getFullData.html", method = RequestMethod.GET)
public void getFullData(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException{
List<CompositeRequirement> allRecords = compReqServ.getFullDataSet((String)session.getAttribute("currentProject"));
response.setContentType("data:text/csv;charset=utf-8");
response.setHeader("Content-Disposition","attachment; filename=\yourData.csv\"");
OutputStream resOs= response.getOutputStream();
OutputStream buffOs= new BufferedOutputStream(resOs);
OutputStreamWriter outputwriter = new OutputStreamWriter(buffOs);
CsvWriter writer = new CsvWriter(outputwriter, '\u0009');
for(int i=1;i <allRecords.size();i++){
CompositeRequirement aReq=allRecords.get(i);
writer.write(aReq.toString());
}
outputwriter.flush();
outputwriter.close();
};
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么一步?基本上,净效应是......没有.我原本以为设置标题和内容类型会导致我的浏览器接收响应并触发文件下载操作.
我有一个部门实体,其关系如下:
许多部门可以在一个父部门:
@ManyToOne
@JoinColumn(name = "ik_parent_department_id")
private Department parentDepartment;
Run Code Online (Sandbox Code Playgroud)一个父部门可以有很多部门:
@OneToMany(mappedBy = "parentDepartment")
private Set<Department> children = new HashSet<Department>(0);
Run Code Online (Sandbox Code Playgroud)我想实现下一个:当我删除一个部门时,该部门所有子项的ik_parent_department_id参数都设置为null.任何想法如何做到这一点?
我想将值插入MySQL中的位类型列.但我收到数据截断错误.
CREATE TABLE `BITTESTTABLE` (
`db_field` varchar(50) NOT NULL,
`is_editable` bit(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
如果我插入一行
INSERT INTO BITTESTTABLE values('XYZ','0')
我正进入(状态
第1行的列'is_editable'的数据太长
那么如何插入位类型列的数据?
我目前正在开发一个Spring MVC应用程序,我需要在登录时向我的Spring Security登录用户添加一个自定义字段(我插入用户名,密码,自定义值).当用户登录时(例如,通过pricipal.getValue),该值必须在任何地方都可用.
我阅读了很多关于自定义用户类和自定义服务的内容,但无法真正找到解决问题的解决方案......
任何帮助都会很棒!
我使用Spring MVC将BLOB类型映像存储在MySQL数据库中,用于项类Item(itemId,itemName,itemPrice,itemContent,itemImage).我成功地将图像存储在数据库中但是当我试图在我的jsp中显示它时,它显示的是二进制文件,如[B @ 7fb0c025.
如何在JSP中显示正确的图像(图像存储在MySQL数据库表中)
我的模特课:
@Entity
@Table(name="item")
public class Item {
@Id
@Column(name="ItemId")
@GeneratedValue
private Integer itemId;
@Column(name="ItemName")
private String itemName;
@Column(name="ItemContent")
private String itemContent;
/*
@Column(name="ItemImage")
private ByteArray ItemImage;
*/
@Column(name="ItemPrice")
private int itemPrice;
@Column(name="ItemImage")
private byte[] itemImage;
Run Code Online (Sandbox Code Playgroud)
"addItem.jsp"用于在数据库中添加项目属性和图像.
<form:form modelAttribute="itemAttribute" enctype="multipart/form-data" method="POST" action="${Url}">
<table>
<tr>
<td><form:label path="itemId"></form:label></td>
<td><form:input path="itemId" type="hidden"/></td>
</tr>
<tr>
<td><form:label path="itemName">ItemName:</form:label></td>
<td><form:input path="itemName"/></td>
</tr>
<tr>
<td><form:label path="itemPrice">ItemPrice:</form:label></td>
<td><form:input path="itemPrice"/></td>
</tr>
<tr>
<td><form:label path="itemContent">ItemContent:</form:label>
<td><form:input path="itemContent"/>
</tr>
<tr>
<form:label for="itemImage" path="itemImage">itemImage:</form:label>
<form:input path="itemImage" type="file" /> …Run Code Online (Sandbox Code Playgroud) 当我使用安全性登录时,我无法使用该request.isUserInRole()方法.我认为没有设置用户的角色.
这是我的安全配置:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled=true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private UserDetailsServiceImplementation userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/signup").permitAll()
.antMatchers("/").permitAll()
//.antMatchers("/first").hasAuthority("Service_Center")
.antMatchers("/login").permitAll()
.anyRequest().fullyAuthenticated()
.and().formLogin()
.loginPage("/login")
.usernameParameter("email")
.passwordParameter("password")
.defaultSuccessUrl("/default")
.failureUrl("/login?error").permitAll()
.and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login?logout")
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true).permitAll();
}
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的User实体:
@Entity
@Table(name="user")
public class User implements Serializable{
/**
*
*/
private static final long …Run Code Online (Sandbox Code Playgroud) spring ×5
spring-mvc ×5
java ×3
hibernate ×2
javascript ×2
binary-data ×1
controller ×1
csv ×1
django ×1
file-io ×1
image ×1
jquery ×1
json ×1
jsp ×1
multipart ×1
mysql ×1
pdf ×1
servlets ×1
spring-boot ×1