我是Web编程的新手,特别是在Java中,所以我只是学习了标题和正文.
我正在使用Spring MVC编写RESTful服务.我能够@RequestMapping在我的控制器中创建简单的服务.我需要帮助了解如何从我的REST服务控制器中的方法请求中获取HTTP头信息.我想解析标题并从中获取一些属性.
你能解释我如何获取这些信息吗?
我byte[]从DB 获取图像数据(as ).如何返回此图片@ResponseBody?
编辑
我没有@ResponseBody使用HttpServletResponseas方法参数我做了:
@RequestMapping("/photo1")
public void photo(HttpServletResponse response) throws IOException {
response.setContentType("image/jpeg");
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
IOUtils.copy(in, response.getOutputStream());
}
Run Code Online (Sandbox Code Playgroud)
使用@ResponseBody注册org.springframework.http.converter.ByteArrayHttpMessageConverter转换器作为@Sid说对我不起作用:(.
@ResponseBody
@RequestMapping("/photo2")
public byte[] testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
return IOUtils.toByteArray(in);
}
Run Code Online (Sandbox Code Playgroud) 我有一个控制器,提供对信息的RESTful访问:
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")
public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request,
HttpServletResponse response) {
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果我使用带有特殊字符的路径变量命中服务器,它将被截断.例如: http:// localhost:8080/blah-server/blah/get/blah2010.08.19-02:25:47
参数blahName将是blah2010.08
但是,对request.getRequestURI()的调用包含传入的所有信息.
知道如何防止Spring截断@PathVariable吗?
有人可以解释Spring 3中的注释@RequestBody和@ResponseBody注释吗?它们适用于什么?任何例子都会很棒.
我有一个Spring 2.5/Java/Tomcat应用程序.有以下bean,在许多地方的整个应用程序中使用
public class HibernateDeviceDao implements DeviceDao
Run Code Online (Sandbox Code Playgroud)
和以下新的bean:
public class JdbcDeviceDao implements DeviceDao
Run Code Online (Sandbox Code Playgroud)
第一个bean配置为(包括所有bean)
<context:component-scan base-package="com.initech.service.dao.hibernate" />
Run Code Online (Sandbox Code Playgroud)
第二个(新)bean是单独配置的
<bean id="jdbcDeviceDao" class="com.initech.service.dao.jdbc.JdbcDeviceDao">
<property name="dataSource" ref="jdbcDataSource">
</bean>
Run Code Online (Sandbox Code Playgroud)
当然,这会导致启动服务器时出现异常:
嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型为[com.sevenp.mobile.samplemgmt.service.dao.DeviceDao]的唯一bean:期望的单个匹配bean但找到2:[deviceDao,jdbcDeviceDao]
从一个试图像这样自动装豆的类
@Autowired
private DeviceDao hibernateDevicDao;
Run Code Online (Sandbox Code Playgroud)
因为有两个bean实现相同的接口.
是否可以配置bean以便这样做
1.我不必对已经HibernateDeviceDao自动装配的现有类进行更改
2.仍然可以像这样使用第二个(新)bean:
@Autowired
@Qualifier("jdbcDeviceDao")
Run Code Online (Sandbox Code Playgroud)
即我需要一种方法将HibernateDeviceDaobean 配置为要自动装配的默认bean,同时允许在使用注释JdbcDeviceDao显式指定时使用@Qualifier.
我试过设置属性
autowire-candidate="false"
Run Code Online (Sandbox Code Playgroud)
在JdbcDeviceDao的bean配置中:
<bean id="jdbcDeviceDao" class="com.initech.service.dao.jdbc.JdbcDeviceDao" autowire-candidate="false">
<property name="dataSource" ref="jdbcDataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
因为Spring文档说明了这一点
指示在查找匹配候选项以满足另一个bean的自动装配要求时是否应考虑此Bean.请注意,这不会影响名称的显式引用,即使指定的bean未标记为autowire候选,也会解析引用.*
我解释为我仍然可以JdbcDeviceDao使用@Qualifier注释自动装配并具有HibernateDeviceDao默认bean.显然,我的解释是不正确的,因为这会在启动服务器时导致以下错误消息:
类型[class com.sevenp.mobile.samplemgmt.service.dao.jdbc.JdbcDeviceDao]的不满意依赖:预计至少有一个匹配的bean
来自我尝试使用限定符自动装配bean的类:
@Autowired
@Qualifier("jdbcDeviceDao")
Run Code Online (Sandbox Code Playgroud)
@GetMapping和之间有什么区别@RequestMapping(method = RequestMethod.GET)?
我在一些Spring Reactive示例中看到过,
@GetMapping而不是使用它@RequestMapping
我正在寻找在Spring MVC中绑定和转换数据的最简单和最简单的方法.如果可能,不进行任何xml配置.
到目前为止,我一直在使用PropertyEditors:
public class CategoryEditor extends PropertyEditorSupport {
// Converts a String to a Category (when submitting form)
@Override
public void setAsText(String text) {
Category c = new Category(text);
this.setValue(c);
}
// Converts a Category to a String (when displaying form)
@Override
public String getAsText() {
Category c = (Category) this.getValue();
return c.getName();
}
}
Run Code Online (Sandbox Code Playgroud)
和
...
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Category.class, new CategoryEditor());
}
...
}
Run Code Online (Sandbox Code Playgroud)
它很简单:两个转换都在同一个类中定义,绑定很简单.如果我想在我的所有控制器上进行通用绑定,我仍然可以在我的xml配置中添加3行 …
Is there a way to get the complete path value after the requestMapping @PathVariable values have been parsed?
这就是:
/{id}/{restOfTheUrl}应该可以解析/1/dir1/dir2/file.html成id=1和restOfTheUrl=/dir1/dir2/file.html
任何想法,将不胜感激.
我正在使用jQuery $.getJSON()来对我简单的Spring MVC后端进行异步调用.大多数Spring控制器方法如下所示:
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
@RequestParam("type") String type) {
return someDAO.getSomeData(widget, type);
}
Run Code Online (Sandbox Code Playgroud)
我设置了一些东西,以便每个控制器都返回@ResponseBodyJSON,这是客户端所期望的.
但是当请求不应该向客户端返回任何内容时会发生什么?我能有......吗:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果没有,这里使用的语法是什么?提前致谢!
我的问题基本上是对这个问题的后续行动.
@RestController
public class TestController
{
@RequestMapping("/getString")
public String getString()
{
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
在上面,Spring会在响应体中添加"Hello World".如何将String作为JSON响应返回?我知道我可以添加引号,但这更像是一个黑客.
请提供任何示例来帮助解释这个概念.
注意:我不希望这直接写入HTTP响应体,我想以JSON格式返回String(我使用我的Controller与RestyGWT,它要求响应是有效的JSON格式).
spring-mvc ×10
spring ×8
java ×7
rest ×3
annotations ×1
autowired ×1
data-binding ×1
get ×1
http ×1
jquery ×1
json ×1
spring-4 ×1