我目前正在学习spring MVC,特别是@restController,我遇到了一个问题,那就是我不知道如何处理它。以下是我的代码
package com.kh.myapp.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.kh.myapp.member.service.MemberService;
import com.kh.myapp.member.vo.MemberVO;
@RestController
@RequestMapping("/hello")
public class RestfulController {
@Autowired
@Qualifier("memberServiceImplXML")
MemberService ms;
@RequestMapping("/hello")
public String hello() {
return "hello";
}
/*@RequestMapping(value = "/member", produces = "application/json")
public MemberVO member(@RequestParam("id") String id) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}*/
@RequestMapping(value = "/member/{id:.+}", method = RequestMethod.GET)
public MemberVO member(@PathVariable String id) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}
@RequestMapping(value = "/memberXML", method = RequestMethod.GET, produces = "application/json")
public MemberVO memberXML(HttpServletRequest request) {
String id = request.getParameter("id");
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}
@RequestMapping(value = "/memberList")
public List<MemberVO> memberList() {
List<MemberVO> list = ms.getMembers();
return list;
}
@RequestMapping("/memberMap")
public Map<Integer, MemberVO> memberMap(){
Map<Integer, MemberVO> map = new HashMap<>();
for(int i = 0; i < 10; i++) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID("admin" + i + "@kh.com");
map.put(i+1, mv);
}
return map;
}
}
除了@pathVariable方法之外,一切都运行得很好。如果我在rex参数的末尾添加'/‘,它也可以正常工作,但我听说这是一个危险的想法,因为它非常不可维护。另外,如果我不使用点变量作为rex参数(/{id}而不是/{id:.+}),它也可以正常工作。但我必须在这里使用电子邮件格式!
我使用的是spring 5.0.6,最后HTTP响应是
Status Report
Description The target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request, and the server is unwilling to supply a default representation.
这是我在postman上执行的头文件
content-language →en
content-length →1175
content-type →text/html;charset=utf-8
date →Mon, 11 Jun 2018 09:00:04 GMT
对不起,我的英语,我几乎不能交流。如果任何人对此有想法,请帮助!
更新
我在root-context.xml中配置了一些属性
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false"/>
<property name="favorParameter" value="true"/>
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useSuffixPatternMatch" value="false"/>
<property name="alwaysUseFullPath" value="true"></property>
</bean>
现在,如果我在regEx变量的末尾添加.json或.xml,但没有数据,它将调用200ok。
发布于 2018-06-11 17:30:52
尝试将path变量定义为:
@PathVariable("id") String id
而不是:
@PathVariable String id
发布于 2018-08-16 16:53:17
在这些线上,
@RequestMapping(value = "/member/{id:.+}", method = RequestMethod.GET) public MemberVO member(@PathVariable String id) {
替换为,
@RequestMapping(value = "/member/{id}", method = RequestMethod.GET) public MemberVO member(@PathVariable(value="id", required=true) String id) {
https://stackoverflow.com/questions/50794280
复制相似问题